目录
一、类定义和使用
理解
类是用来对一个实体(对象)来进行描述的: 即 定义一个类型的物体:{他有什么属性;他有什么功能} java中定义类时需要用到class关键字
class ClassName{ field; // 字段(属性) 或者 成员变量 method;// 行为 或者 成员方法 }
内容
注意事项
- **类名注意采用大驼峰定义 **
- 成员前写法统一为public,后面会详细解释
- 此处写的方法不带 static 关键字. 后面会详细解释
- 一般一个文件当中只定义一个类
- main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
- public修饰的类必须要和文件名相同
- 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
代码
class WashMachine{
//类的属性
public String brand; // 品牌
public String type; // 型号
public double weight; // 重量
public double lenght; // 长
public double weidth; // 宽
public double height; // 高
public String color; // 颜色
//类的行为
public void WashClothes(){ // 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){ // 脱水
System.out.println("脱水功能");
}
public void SetTime(){ // 定时
System.out.println("定时功能");
}
}
二、 类的实例化
理解
定义类之后,就相当于制作好一张设计图纸 类的实例化就是将房子造出来
内容
注意事项
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建对个实例.
代码
public class Main{
public static void main(String[] args) {
PetDog dogh = new PetDog(); //通过new实例化对象
dogh.name = "阿黄";
dogh.color = "黑黄";
dogh.barks();
dogh.wag();
PetDog dogs = new PetDog();
dogs.name = "阿黄";
dogs.color = "黑黄";
dogs.barks();
dogs.wag();
}
}
输出结果:
阿黄: 旺旺旺~~~
阿黄: 摇尾巴~~~
赛虎: 旺旺旺~~~
赛虎: 摇尾巴~~~
三、this引用
理解
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
意思就是:谁调用这个类中的属性或者方法,谁就是这个this
内容
1、this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在"成员方法"中使用
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
- this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法。对象的引用传递给该成员方法,this负责来接收
代码中:testDate调用 .setDate 以及 .printDate方法,所以调用时里的this指的就是testDate
代码
public class TestDate {
public int year;
public int month;
public int day;
public void setDate(TestDate this,int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(TestDate this){
System.out.println(this.year+"-"+this.month+"-"+this.day);
}
public static void main(String[] args) {
TestDate testDate = new TestDate();
testDate.setDate(2022,8,6);
/*testDate.year = 2022;
testDate.month = 8;
testDate.day = 4;*/
testDate.printDate();
}
}
四、初始化对象
理解
Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。
public static void main(String[] args) { int a; System.out.println(a); } // Error:(26, 28) java: 可能尚未初始化变量a
如果是对象的话
public static void main(String[] args) { Date d = new Date(); d.printDate(); //此处引用对象未声明 d.setDate(2021,6,9); d.printDate(); } // 代码可以正常通过编译
那么问题:
- **每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化? **
- 局部变量必须要初始化才能使用,为什么引用声明之后没有给值依然可以使用?
内容
1、构造方法
概念
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次,用于初始化对象
重点:
- 想要实例化对象,就一定会调用构造方法
- 当我们没有提供任何构造方法时,编译器会帮我们提供一个不带参数的构造方法
- 当构造方法调用完成后,对象才实际上产生了
- 一旦用户定义,编译器则不再生成
- 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复
- 此处可以在无参构造方法中通过this调用带有三个参数的构造方法
- this(1900,1,1);必须是构造方法中第一条语句
- 不能形成环
代码
public class Date {
public int year;
public int month;
public int day;
// 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复
// 此处可以在无参构造方法中通过this调用带有本类中另一个三个参数的构造方法
// 但是this(1900,1,1);必须是构造方法中第一条语句
public Date(){
//System.out.println(year); 注释取消掉,编译会失败
this(1900, 1, 1);
//this.year = 1900;
//this.month = 1;
//this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
//this();这就形成环了
this.year = year;
this.month = month;
this.day = day;
}
}
初始化所分配的空间:
数据类型 默认值 byte 0 char '\u0000' short 0 int 0 long 0L boolean false float 0.0f double 0.0 reference null
2、 就地初始化
在声明成员变量时,就直接给出了初始值。
注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中
代码
public class Date {
public int year = 1900;
public int month = 1;
public int day = 1;
public Date() {
}
public Date(int year, int month, int day) {
}
public static void main(String[] args) {
Date d1 = new Date(2021, 6, 9);
Date d2 = new Date();
}
}