Java 复习笔记
面向对象
特点:
- 将复杂的事情简单化。
- 面向对象将以前的过程中的执行者,变成指挥者。
- 面向对象这种思想是符合现在人们思考习惯的一种思想。
在类中定义其实都称之为成员,成员有两种:
- 成员变量:其实对应的就是事物的属性。
- 成员函数:其实对应的就是事物的行为。
private
- private int age; // 私有的访问权限最低,只有在本类中的访问有效。
- 注意:私有仅仅是封装的一种体现形式而已。
构造函数:
用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
- 该函数的名称和所在类的名称相同。
- 不需要定义返回值类型。
- 该函数没有具体的返回值。
所有对象创建时,都需要初始化才可以使用。
构造函数和一般函数有什么区别?
- 两个函数定义格式不同。
- 构造函数在对象创建时,就被调用,用于初始化,而且初始化只执行一次。一般函数,是对象创建后,需要调用才执行,可以被调用多次。
Student student = new Student();
创建一个对象都在内存中做了什么事情?
- 先将硬盘指定位置的Student.class文件加载进内存
- 执行main方法时,在栈内存中开辟main方法的空间(压栈-进栈),然后在main方法中的栈区分配一个变量student。
- 在堆内存中开辟一个实体空间,分配了一个内存首地址值,new
- 在该实体空间中进行属性的空间分配,并进行默认初始化。
- 在对空间中的属性进行显示初始化。
- 进行实体对应的构造函数,进行构造函数的初始化。
- 将首地址赋值给student,student变量就引用了该实体(指向了该对象)。
代码示例:
package JavaOOP;
// 类和对象
public class Student {
// 属性
int id;
String name;
int age;
Computer computer; // 计算机
// 方法
void study(){
System.out.println("我在认真学习!使用电脑:"+computer.brand);
}
void play(){
System.out.println("我在玩游戏!");
}
// 无参的构造方法,用于创建这个类的对象,无参的构造方法可以由系统自动的创建
Student(){
}
// main 方法:程序执行的入口 必须要有
public static void main(String[] args) {
// 创建student对象
Student student = new Student();
student.id=01;
student.name="羊星鱼";
student.age=18;
Computer c1 = new Computer();
c1.brand="联想";
student.computer = c1;
// 调用play方法
student.play();
student.study();
}
}
// 一个java文件可以有多个类,但只能有一个public修饰类
class Computer{
String brand; // 品牌
}
对象的创建过程和this关键字
this 指代当前对象,就是所在函数所属对象的引用 ,在定义功能时,该功能的对象,用this来表示这个对象.
this 还可以用于构造函数间的调用.
this的本质就是"创建好的对象的地址",由于在构造方法调用前,对象已经创建,因此,在构造方法中也可以使用this代表"当前对象"
this常用方法
- this不能用于static方法中
- 使用this关键字调用重载的构造方法,避免相同的初始化代码,但只能在构造方法中用,并且必须位于构造方法的第一句
- 在程序中产生二义性之处,应使用this指明当前对象;普通方法中,this总是指向调用该方法的对象;构造方法中,this总是指向正要初始化的对象.
调用格式: this(实际参数);
- this对象后面跟上.调用的是成员属性和成员方法(一般方法);
- this对象后面跟上()调用的是本类中的对应参数的构造函数.
- this调用的构造函数,必须定义在构造函数的第一行,构造函数是用初始化的,所以初始化动作一定要执行,否则编译失败.
代码示例:
package JavaOOP;
public class TestThis {
int a,b,c;
TestThis(int a,int b){
// 就近原则
this.a = a;
this.b = b;
}
TestThis(int a,int b,int c){
// 这个this指调用上面构造器,且必须位于第一句
this(a,b);
this.c = c;
}
void sing(){
}
void eat(){
// 调用本类中的sing
// 这个this可写可不写
this.sing();
System.out.println("你妈喊你回家吃饭!");
}
public static void main(String[] args) {
TestThis testThis = new TestThis(2,3);
testThis.eat();
}
}
创建一个对象分为四步:
- 分配对象空间,并将对象成员变量初始化为0或空
- 执行属性值显示初始化
- 执行构造方法
- 返回对象的地址给相关的变量
static关键字
特点:
- 实现对象中的共性数据的共享,可以将这个数据进行静态修饰。
- 被静态修饰的成员,可以直接被类名所调用。
- 静态随着类的加载而加载,而且由于对象存在。
弊端:
- 静态方法只能访问静态成员,不可以访问非静态成员。
- 静态方法中不能使用this,super关键字。
- 主函数是静态的
关于权限:
- public:访问权限最大。
- static:不需要对象,直接类名即可。
- void:主函数没有返回值
- main:主函数特定的名称
注意:
- 在类中,用static声明的成员变量为静态成员变量,也称为类变量,类变量的生命周期和类像相同,在整个应用程序执行期间都有效。
- static修饰的成员变量和方法,从属于类。
- 普通方法和方法从属于对象