- Java类及类的成员:属性、方法、构造器 、代码块、内部类
- 面向对象三大特征:封装 继承 多态 (抽象性)
- 其他关键字:this super static final abstract interface package import
类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
属性=成员变量=field=域、字段
方法=成员方法=函数=method
创建类的对象=类的实例化=实例化
二、类和对象的使用(面向对象思想落地的实现):
1,创建类,设计类的成员
2.创建类的对象
3通过“对象.属性”或“对象.方法”调用对象的结构
注意不要将两类造成包含关系
public class ClassDemo {
public static void main(String[] args) {
//类的实例化
Person person = new Person();
//调用对象的属性和方法
person.name = "有道";
System.out.println(person.getName());
person.say("鸟语");
person.hello();
person.age = 500;
System.out.println(person.age);
}
}
class Person {
//属性
int age;
String name;
boolean isMale;
//方法
public void hello() {
System.out.println("你好,有道君");
}
public String getName() {
return this.name;
}
三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
意味着:如果我们修改一个对象的属性,则不影响另外一个对象属性a的值。
对象的内存解析
属性vs局部变量 相同点- 定义变量的格式:数据类型 变量名=变量值
- 先声明,后调用
- 变量都有其对应的作用域
-
在类中声明的位置不同
- 属性:直接定义在一对{}内
- 局部变量:声明在方法内、方法形参、代码块、构造形参、构造器内部变量
-
关于权限修饰符的不同
-
属性
- 可以在声明属性时,指明其权限,使用权限修饰符
- 常用的权限修饰符:private public 缺省 protected —>封装性
- 目前大家声明变量时候使用缺省就可以了
-
局部变量
- 不可以使用修饰符
-
-
默认初始化值的情况
-
属性
-
类的属性,根据其类型,都有默认的初始化值
整型(byte short int long ) 0
浮点型(float double) 0.0
字符型(char)0
布尔型(boolean) false
引用数据类型(类 数组 接口)
-
-
局部变量
-
没有默认的初始化值
意味着,我们在调用局部变量前,一定要显性赋值
特别的:形参在调用时,我们赋值即可
-
-
-
在内存中的加载
- 属性
- 放在堆内存中
- 局部变量
- 放在栈内存中
- 属性
方法:描述类应该具有的功能
比如:Math类:sqrt()random()…
Scanner类:next()nextXxx()
Array类:sort()binarySearch()…
1.举例:
public void eat(){}
public void sleep(int hour){}
public string getName(){}
public string getNation(string nation){}
2.方法的声明:权限修饰符返回值类型方法名(形参列表){
方法体
}
注意:static、final、abstract来修饰的方法,后面再讲。
说明:
-
Java规定的4种权限修饰符:private、public、缺省、protected–>封装性再来叙述
-
返回值类型:有返回值VS没有返回值
-
如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return数据”。
-
如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。
-
我们定义方法该不该有返回值?
①题目要求
②凭经验:具体问颗具体分析
-
-
方法名:属于标识符,遵循标识符的规则和规范,“见名知意”
-
形参列表:方法可以声明0个,1个,或多个形参。
- 格式:数据类型1 形参1,数据类型2 形参2,···
- 我们定义方法时,该不该定义形参?
①题目要求
②凭经验:具体问题具体分析
-
方法体:方法功能的提现
-
return关键字的使用:
- 使用范围:使用在方法体中
- 作用:
①结束方法
②针对于有返回值类型的方法,使用"return数据"方法返回所要的数据 -
方法的使用中,可以调用当前类的属性或方法
特殊的:方法A中又调用了方法A:递归方法。
方法中,不可以定义方法!!!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b9W3iFf9-1657639604746)(https://cdn.jsdelivr.net/gh/gaoyoudao/Picture/img/image-20220712220116308.png)]
public class Demo {
public static void main(String[] args) {
Person1 person = new Person1();
person.age=18;
person.study();
person.addAge(2);
person.showAge();
Person1 person1 = new Person1();
person1.showAge();
person1.addAge(2);
person1.showAge();
person.showAge();
}
}
class Person1{
String name;
int age;
int sex;
public void study(){
System.out.println("studying");
}
public void showAge(){
System.out.println(age);
}
public int addAge(int i){
age+=i;
return age;
}
}
2.利用面向对象的编程方法,设计类Circle计算圆的面积
package com.youdao.java;
public class Circle {
double r=0.0;
public double area(){
return Math.PI*r*r;
}
}
package com.youdao.java;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Circle circle= new Circle();
circle.r=scanner.nextDouble();
System.out.println(circle.area());
}
}
3.对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int),创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1)生成随机数:Math.random(),返回值类型double;
2)四舍五入取整:Math.round(double d),返回值类型Iong.
public class Student {
//学号
int number;
//成绩
int score;
//年级
int state;
@Override
public String toString() {
return "Student{" +
"number=" + number +
", score=" + score +
", state=" + state +
'}';
}
}
public class Test {
public static void main(String[] args) {
Student[] students = new Student[20];
for (int i = 0; i < students.length; i++) {
students[i] = new Student();
students[i].number = i + 1;
students[i].score = (int) Math.round((Math.random() * (99 - 0 + 1) + 0));
students[i].state = (int) Math.round((Math.random() * (10 - 1 + 1) + 1));
}
Test test=new Test();
test.selectAll(students);
System.out.println("*********************************************");
test.selectByState(students,3);
System.out.println("*********************************************");
test.selectAll(test.sort(students));
}
public void selectAll(Student[] students) {
for (int i = 0; i < students.length; i++) {
System.out.println(students[i].toString());
}
}
public void selectByState(Student[] students, int state) {
for (int i = 0; i < students.length; i++) {
if (students[i].state == state) {
System.out.println(students[i].toString());
}
}
}
public Student[] sort(Student[] students){
for (int i = 0; i < students.length - 1; i++) {
for (int j = 0; j < students.length - 1 - i; j++) {
if (students[j].score > students[j + 1].score) {
int temp = students[j].score;
students[j].score = students[j + 1].score;
students[j + 1].score = temp;
}
}
}
return students;
}
}



