类:构造对象的模板
姓名 | A | B |
身高 | 167 | 170 |
模板(类) | 对象 | 对象 |
1.类的定义 属性的定义
class Student{ //类的定义
String name; //属性的定义
int age;
}
什么是属性呢? 在 类里,方法外, 定义变量且不加 static 就是属性
2.实例化对象的语法
Student s = new Student();
通过引用 使用引用 指向的对象的属性
例如:s.name = ...; ... = s.name;
3.关于属性的初始化的语法
1)默认值规则
2)构造方法规则(构造器)
(和方法长得有点类似)
class Student{
Student(){
...
}
Student(int a){...}
}
备注:a.构造方法的名称 == 类名称
b.没有返回值类型的声明
c.构造器重载
d.没有任何构造方法时,会自动补一个无参构造方法
e.实例化时,根据参数列表选择何时的构造方法调用
public Student() {
name = "默认值";
major = "搬砖";
height = 180;
System.out.println("我是无参的构造方法");
}
public Student(String n, String m, int h) {
name = n;
major = m;
height = h;
System.out.println("我是 String 参数的构造方法");
}
public Student(String a, int b) {
System.out.println("(String, int) 构造方法");
}
3)定义时初始化
4)构造代码块规则( 在类的内部,方法的外部 )
执行顺序:1.默认值规则
2.定义时初始化和构造代码块按照书写顺序
3.构造器
4.this
作用1 : 引用 ( 在构造方法中,在实例方法中 代表指向当前对象的引用 )类型就是当前类
class Person{ this 类型 Person }
class Cat{ this 类型 Cat }
指向当前的对象 : 构造器中 this 指向的就是当前正在构造的对象
this.name this.age
作用2 : 在一个构造方法中调用其他构造方法
this(...)必须是第一行
5.使用属性的语法
s.name s.age this.name this.age
6.行为:在java中以实例方法的形式体现,定义与之前想同,不加static,在实例方法中可以直接访问属性(和构造方法类似)
方法:1.静态方法 (类方法) 加 static 修饰——不能访问属性,不可以使用this
2.普通方法 (实例方法) 不加static——可以访问属性,可是使用this
调用:
实例方法的调用,必须依赖一个对象 (通过引用) 的存在
Person p = new Person();
p.sayHello(); 引用 点 普通方法()
普通方法 | 静态方法 | |
方法内部 | 有this | 没有this |
可以访问属性 | 不能访问对象属性 | |
可以调用普通方法 | 不能调用普通方法 | |
方法外部 | 对象的引用去调用 | 可以直接调用 |
"需要传入一个this" | "不需要传入this" |
7.类 => 对象的过程 实例化
8.总结:在静态上下文中无法直接调用普通方法 访问对象属性
1)static {...}
2)静态方法
对于static的理解:加了 static 之后,只和类有关,和类本身的对象无关.反之,不加static,和本类的对象息息相关.
9.变量 & 方法
局部变量 | 生命周期:跟着方法的运行走 |
区域:栈帧 > 栈 | |
类变量、静态变量、静态属性 | 生命周期:跟着类的加载、卸载走 |
区域:类 > 方法区 | |
实例变量、属性 | 生命周期:跟着对象实例化,清理走 |
区域:对象 > 堆区 |
静态方法 | 方法区 |
普通方法 | 方法区 |
10.类里可以写什么
类{
//和对象无关——static系列——和类本身绑定
1.静态属性 2.静态方法 3.静态代码块 (静态上下文)
//和对象有关——不加static系列——和类+对象绑定
1.属性 2.方法 3.构造代码块 4.构造器
}