面向对象(1)
1. 面向对象的思想及其特点
1.1 面向对象的思想
面向对象即把构成问题的事务按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。
1.2 面向对象的特点
- 封装性
- 继承性
- 多态性
2. 类(引用数据类型)与对象
2.1. 类的定义
class 类名{
成员变量;
成员方法;
}
脚下留心:
class Student {
int age = 30; // 成员变量
void read(){
int age = 50; // 局部变量
System.out.println(age)
}
}
// 允许成员变量与局部变量同名,但是在成员方法中访问到的变量为局部变量
2.2. 对象的定义
类名 对象名 = new 类名()
Student s = new Student()
// Student s 即声明了一个Student类型的变量s
// new Student() 即创建了一个Student类的一个实例对象
// = 即将对象地址赋给变量s
stu对象的内存分配
对象名保存在栈内存中,对象属性信息保存在堆内存中。
2.3 对象的引用传递
引用数据类型:内存空间可以同时被多个栈内存引用
一个栈内存空间只可指向一个堆内存空间
2.4 访问控制
1.访问权限控制
访问范围 | private | default | protected | public |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中的类 | √ | √ | √ | |
不同包的子类 | √ | √ | ||
全局范围 | √ |
2.注意事项
(1) 类名只可用public修饰或者不写修饰符
(2) 局部变量无访问权限
(3) 若java文件中所有类均未使用public修饰,则文件名可以为一切合法的文件名;否则文件名必须与public修饰的名字相同
3. 封装
3.1 封装的实现
- 使用private 关键字修饰类的属性
- 外界访问必须通过setter 和 getter 方法
3.2 构造方法
(1)构造方法的构造
- 名称与类名一致
- 名称前不可有任何返回值类型的声明
- 不可使用return 返回一个值;但是可以单独写return语句作为方法的结束
(2) 构造方法的重载: 参考方法的重载
(3)若未定义构造方法则会默认创建一个空的构造方法
4. this 关键字
(1) 使用this调用本类的属性
public Student(String name,int age){
this.name = name;
this.age = age;
}
(2) 使用this调用成员方法
(3) 使用this调用本类的构造方法
- 可以在一个构造方法中使用this调用其他的构造方法 this(参数1,参数2…)
- 不可在成员方法中通过this调用构造方法
- 在构造方法中,使用this调用的构造方法的语句必须位于第一行
- 不可在一个类中的两个构造方法中使用this相互调用
5. 代码块
5.1 普通代码块
{
// 里面是普通代码块的内容
}
5.2 构造块(直接在类中定义的代码块)
{
// 里面是构造代码块内容 与构造方法同级
}
// 实例化对象时会在执行构造方法之前执行构造代码块
5.3 静态代码块(用static修饰的代码块称为静态代码块)
类被加载时,静态代码块会被执行;
类只加载一次,静态代码块只被执行一次
5.4 同步代码块
5.5 各代码块的执行顺序
静态代码块 > 构造代码块 > 构造方法
6. static 关键字
6.1 静态属性(全局属性)
访问格式
类名.属性名
只可修饰成员变量,不可修饰局部变量
6.2 静态方法
访问格式
类名.方法 实例对象名.方法
- 静态方法只能访问静态成员,非静态成员要创建对象才会分配内存,静态方法在被调用时可以不创建任何对象