目录
类的作用:通过类 去描述一个具体的对象
使用关键字class+类名去定义一个类,类名是大驼峰
{}中是类的成员,一个类必须包含两部分:属性(成员变量)和行为(成员方法),且变量和方法都是小驼峰
成员(成员变量和成员方法)前写法统一为public,且此处的成员方法不带 static 关键字

1. 一般一个文件当中只定义一个类
2. 每一个类都可以有一个自己的main方法,但只能有一个,main方法的格式为:
public static void main(String[] args){}
3. public修饰的类必须要和文件名相同
4. 类中的成员方法可以直接访问或使用成员变量,即成员变量是可以在成员方法中使用的。
定义了一个类,就相当于在计算机中定义了一种新的类型。如定义一个狗类,它并不是具体的狗,
它只是一种引用类型,需要对其进行实例化。把图纸变成真正的建筑实体。
用引用类型创建对象的过程,称为类的实例化
在Java中采用new关键字,配合类名来创建对象。对象:new 类型() 对象是new出来的

通过点号(.)来访问,引用.变量、引用.方法 点号:调用的意思
通过一个类可以实例化无数个对象
- //定义一个Dog类
- public class Dog {
- //成员变量
- public String name;
- public String color;
- //成员方法
- public void barks(){
- System.out.println(name + "汪汪叫!");
- }
- public void wag(){
- System.out.println(name + "摇尾巴");
- }
- //main方法
- public static void main(String[] args) {
- //实例化一个Dog对象
- Dog dog = new Dog();
- //点号(.)-》调用的意思
- //1.可以通过 引用.属性来访问属性
- dog.name = "小灰";
- dog.color = "灰色";
- System.out.println(dog.name);
- System.out.println(dog.color);
- //2.可以通过 引用.方法来访问方法
- dog.barks();
- dog.wag();
- //实例化一个dog2对象
- Dog dog2 = new Dog();
- dog2.name = "大黄";
- dog2.color = "黄色";
- System.out.println(dog2.name);
- System.out.println(dog2.color);
- dog2.barks();
- dog2.wag();
- }
- }


在类内方法外的变量是成员变量,在方法内的变量是局部变量。
局部变量没初始化程序直接报错。
成员变量没初始化,程序可以运行,默认值是对应的初始值。
(引用变量 -> null,byte/short/int/long->0,float->0.0f,double->0.0,char->'/u0000',
boolean->false)
- public class Date {
- public int year;
- public int month;
- public int day;
-
- public void setDate(int year,int month,int day){
- this.year = year;
- this.month = month;
- this.day = day;
- }
- public void printDate(){
- System.out.println(this.year+" "+this.month+" "+this.day);
- }
-
-
- public static void main(String[] args) {
- Date date = new Date();
- Date date2 = new Date();
-
- date.setDate(2022,8,4);
- date2.setDate(2022,8,5);
-
- date.printDate();
- date2.printDate();
- }
- }
-
1. 形参名不小心与成员变量名相同
可能会出现形参自己给自己赋值的现象,根本没赋值到成员变量中

2.若我多实例化几个对象,在main方法中,我可以通过不同的引用知道是setDate和printDate的哪个对象,但站在成员方法的角度上,这两个函数中没有任何有关对象的说明,setDate和 printDate函数如何知道打印的是那个对象的数据呢?
这就有了this。
this:当前对象的引用,即谁调用这个方法,谁就是this
如:

这时,date就是this
特性:
1. this只能在"成员方法"中使用
2. this是“成员方法”的第一个隐藏的参数,不加也会默认有一个this,(红色和蓝色部分都默认会有)但是为了防止形参名不小心与成员变量名相同,最好还是加上(蓝色部分的)this。

3. this有三种使用:this.成员变量 、 this.成员方法 、 this();访问构造方法

实例化对象这一条语句(如:Student stu = new Student();)在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下(具体在后面JVM中会详细介绍)
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 给对象中包含的成员设置初始值
【所以其实对象空间被申请好之后,对象已经设置好了初始值】
4. 调用构造方法,给对象中各个成员赋值
默认初始化:没给成员变量赋值,此对象的成员变量被默认初始化成初始值 就地初始化:在声明成员变量时,就直接给了值,这就是就地初始化。就地初始化的变量,若后面没有进行修改,那么它默认的输出值就是这个值

1. 构造方法没有返回值,方法名和类名必须是一样的
2. 实例化对象,一定会调用构造方法。当构造方法调用完成之后,对象才实际上产生了。
构造方法的作用就是对对象中的成员进行赋值,赋值为默认值也是赋值。
若是无参构造方法,会将对象中的成员全部赋值为默认值;
若是有参构造方法,会将对象中给了值的成员赋值成给的值,没给值的成员就是原来的初始值

有参构造方法,给了值的成员赋值成给的值,没给值的成员就是原来的初始值。
成员name给值了:hello,成员age没给值。

3. this(...);调用本类当中其它的构造方法,但必须放在构造方法里面,并且必须是第一行,且不能形成环(即不能我调用你,你里面再调用我)

4.若我们没有提供任何的构造方法,编译器会帮我们生成一份默认的无参的构造方法
一旦我们提供了任何一个有参构造方法,编译器则不再生成无参构造方法,若用到,需要我们自己提供

5. 在创建对象时,构造方法由编译器自动调用,并且在整个对象的生命周期内只调用一次。
6. 构造方法的作用就是对对象中的成员进行赋值,且在调用构造方法之前,对象中的成员已经有了初始值。
7. 构造方法可以重载