欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
类和对象
类的组成
对类的理解
成员变量的访问和类方法的调用
this
抛出一个问题
this的作用
初始化成员变量
未初始化的成员变量
代码举例
就地初始化
构造方法初始化成员变量
认识构造方法
注意
快速生成构造方法
快速生成构造方法步骤图解
通过this简化构造方法
代码执行步骤图解
执行结果
类和对象
在Java中,一切皆是对象,类(类型)是描述一个对象的(在C语言中是结构体),对象是一个真正的实体。
目的是:面向对象编程(重点在对象)
类的组成
class为定义类的关键字,ClassName为类的名字(用大驼峰形式),{}中为类的主体。
// 创建类
class ClassName{ field; // 字段(属性) 或者 成员变量method; // 行为 或者 成员方法
}
注意:
- 一般一个文件当中只定义一个类
- main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
- public修饰的类必须要和文件名相同
- 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
例如定义一个类
class Student{//成员变量public String name;public String sex;public int age;//方法public void doClass(){System.out.println("学java!");}
}
对类的理解
通过new关键字可以实例化多个对象,在 堆 上产生对象
- 类只是一个模型一样的东西,用来对一个实体进行描述
- 类是一种自定义的类型,可以用来定义变量.
- 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东 西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
成员变量的访问和类方法的调用
- 利用.访问对象中的成员变量和调用类方法
- 可以new多个实例化对象
如下创建一个洗衣机类,并访问成员变量和调用相关方法
class WashMachine{public String brand;public String color;public double weight;public void washClothes(){System.out.println("洗衣服!");}public void dryClothes(){System.out.println("脱水!");}
}public class j3_30 {public static void main(String[] args) {WashMachine washMachine1=new WashMachine();//new一个实例化对象washMachine1washMachine1.brand="海尔";//利用.访问对象中的成员变量washMachine1.dryClothes();//利用.调用类方法System.out.println(washMachine1.brand);System.out.println("_________");WashMachine washMachine2=new WashMachine();//可以new多个实例化对象washMachine2.brand="美的";System.out.println(washMachine2.brand);washMachine2.dryClothes();}
结果
this
抛出一个问题
如下代码运行结果都是0,这是为什么呢?
public class Date {//这些变量属于对象public int year;public int month;public int day;//设置日期public void setDate(int year,int month,int day){year=year;//局部变量优先使用month=month;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0day=day;}//打印日期public void printDate(){System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");}public static void main(String[] args) {Date date=new Date();//new一个对象datedate.setDate(2024,3,31);date.printDate();System.out.println("**********");Date date2=new Date();//new一个对象datedate2.setDate(2024,3,30);date2.printDate();}
}
这里我们就要考虑变量在内存的存储了~
我们可以看到开头我们定义了3个变量(year,month,day),这里的3个变量是属于成员变量,存储在堆上; 上面代码设置日期的方法里的 定义了3个变量(year,month,day),是局部变量(形参),存储在方法栈上;出现上面的这种情况是因为:对象和局部变量同名时,优先使用局部。
上面局部变量的自我修改(自己修改自己),出了作用域后就又变为了0。
那应该怎样解决该问题呢?我们可以使用this解决
this的作用
我们可以在设置日期的方法里的局部变量前面加上this,用于表示当前对象的引用。
public void setDate(int year,int month,int day){this.year=year;this.month=month;this.day=day;}
成功打印结果
this使用注意
- 在代码里面我们要习惯使用this,当出现可加可不加时,都加上
- this的类型:对应被调用的对象引用类型
- this只能在 成员方法中使用,只能引用当前对象
初始化成员变量
未初始化的成员变量
对于一个类的成员变量,在没有初始化前,每个成员变量都有一个默认值(引用类型是null,其余基本变量是对应的0值,boolean类型是false)
代码举例
就地初始化
在声明成员变量时,就直接给出了初始值。
public int year=2000;
public int month=1;
public int day=1;
构造方法初始化成员变量
认识构造方法
首先它是一个方法(返回值,方法名,参数列表{}),但又有区别,只有 方法名、参数列表{}、没有返回值 且 方法名和类名相同
例如
public Date(int year, int month, int day){this.year = year;this.month = month;this.day = day;System.out.println("学Java!");}
注意
- 当我们没有写任何构造方法时,会默认存在一个(无参数的)
- 只要存在任何一个构造方法,编译器就不会再提供了
- 构造方法可以重载(参数不一样)
快速生成构造方法
通过编译器快速产生多个不同的构造方法,构成方法的重载
public Date(int year, int month) {this.year = year;this.month = month;}public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public Date(int month) {this.month = month;}
快速生成构造方法步骤图解
通过this简化构造方法
public Date(){this(2024,3,31);//必须放在第一行System.out.println("22222222");}public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("11111111");}
代码执行步骤图解
执行结果
注意:this的调用不能形成环