欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
类和对象
类的组成
对类的理解
成员变量的访问和类方法的调用
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一个实例化对象washMachine1
washMachine1.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;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0
day=day;
}
//打印日期
public void printDate(){
System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
}
public static void main(String[] args) {
Date date=new Date();//new一个对象date
date.setDate(2024,3,31);
date.printDate();
System.out.println("**********");
Date date2=new Date();//new一个对象date
date2.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的调用不能形成环