镇江网站建设哪家好,买个人家的网站绑定自己的域名,建设领域信用系统网站,灰色关键词排名代发目录 一、类的定义方式以及实例化
1.面向对象
Java是一门纯面向对象的语言(Object Oriented Program#xff0c;简称OOP)#xff0c;在Java的世界里一切皆为对象。
2.类的定义和使用 1.在java中定义类时需要用到class关键字 3.类的实例化
4.类实例化的使用 二、this引用 …目录 一、类的定义方式以及实例化
1.面向对象
Java是一门纯面向对象的语言(Object Oriented Program简称OOP)在Java的世界里一切皆为对象。
2.类的定义和使用 1.在java中定义类时需要用到class关键字 3.类的实例化
4.类实例化的使用 二、this引用 例子1this能区分调用方法的对象。 例子2this区分局部变量和引用对象。
例子3建议给对象都加上this.
三、对象的构造及初始化
1.初始化对象
1.通过引用赋值来初始化
2.就地初始化定义成员变量的同时初始化。一般不用
2.构造方法
(1) 不带参数的构造方法
1.这个构造方法是如何被调用的 2.那为什么之前没有写构造方法的时候也能正常执行show方法呢
(2) 带参数的构造方法
1.构造方法可以有多个 且 构造方法之间构成重载关系
2.一旦自己写了构造函数编译器不会自动提供了
3.构造函数快捷键生成
4.使用this在构造方法内调用其他构造方法
this这个语法只能出现在构造方法当中
只能出现在当前构造方法的第一行
注意不能自己调用自己
4this引用的小总结 一、类的定义方式以及实例化
1.面向对象 Java是一门纯面向对象的语言(Object Oriented Program简称OOP)在Java的世界里一切皆为对象。 举个例子洗衣服 面向过程人 - 把洗衣粉倒进盆里 - 打开水龙头 - 放衣服 - 搓衣服 - 清水洗 - 再放洗衣粉 - 搓衣服 - 清水洗 - 扭干衣服 面向对象 人 - 洗衣粉 - 洗衣机 至于洗衣机是左旋转几圈还是右旋转几圈不在乎洗的过程。 2.类的定义和使用 类是用来对一个实体 ( 对象 ) 来进行描述的 主要描述该实体 ( 对象 ) 具有哪些属性 ( 外观尺寸等 ) 哪些功能 ( 用来干 啥) 描述完成后计算机就可以识别了 定义了一个类相当于在计算机中定义了一种新的类型 1.在java中定义类时需要用到class关键字 class WashMachine{
//属性
public String brand; // 品牌
public String type; // 型号
public double weight; // 重量
public String color; // 颜色//方法
public void washClothes(){ // 洗衣服
System.out.println(洗衣功能);
}
public void dryClothes(){ // 脱水
System.out.println(脱水功能);
}
public void setTime(){ // 定时
System.out.println(定时功能);
}
} 3.类的实例化 实例化 用 定义的类 创建对象就是类的实例化 用new关键字实例化对象同一个类可以实例化多个对象 以下代码 PetDog petDog1 new PetDog(); 同理PetDog petDog2 new PetDog();就是在实例化对象 类相当于是一个模型用这个模型可以造出很多个对象。所以可以实例化多个对象。 class PetDog{//狗的属性public String name;//名字public String color;//颜色//狗的行为public void barks(){System.out.println(name :旺旺旺~~~);}public void wag(){System.out.println(name :摇尾巴~~~);}
}
public class Test2 {public static void main(String[] args) {//实例化 定义了一个类相当于在计算机中定义了一种新的类型//用 定义的类 创建对象就是类的实例化//用new关键字实例化对象同一个类可以实例化多个对象PetDog petDog1 new PetDog();petDog1.color 红色;petDog1.name feifei;//访问实例化对象的属性System.out.println(petDog1.name);System.out.println(petDog1.color);//调用实例化对象的行为petDog1.barks();petDog1.wag();System.out.println();PetDog petDog2 new PetDog();petDog2.color 白色;petDog2.name huahua;//访问实例化对象的属性System.out.println(petDog2.name);System.out.println(petDog2.color);//调用实例化对象的行为petDog2.barks();petDog2.wag();// System.out.println(petDog1);//对象的地址
// System.out.println(petDog2);}
}4.类实例化的使用 给对象赋值 打印实例化对象的属性以及 .方法 来调用方法 结果 二、this引用 this引用指向当前对象 ( 成员方法运行时调用该成员方法的对象 ) 在成员方法中所有成员变量的操作都是通过该 引用去访问 。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 作用 1.能区分调用方法的对象。date调用的就对date操作date2调用的就对date2操作。
2.区分局部变量和引用对象。避免形参名与对象名相同时局部变量自己赋值。例子1this能区分调用方法的对象。 方法只有1个现在有两个实例化对象date和date2那么在调用这个方法的时候我们怎么确定
这个方法是给date赋值还是在给date2赋值
date.setDate(1999,1,1);//调用setDate方法,传参 1999,1,1
date2.setDate(2000,2,2);//调用setDate方法,传参 2000,2,2
虽然在调用的时候有写date或者date2但是进入方法以后谁知道谁是谁呢其实这个方法有个隐藏的函数Date.this public class Date {
//属性public int year;//public int year 2023;//一般不写值写了相当于默认值public int month;public int day;
//方法public void setDate(int y,int m,int d){year y;month m;day d;}
} public void print(){System.out.println(year:year month:month day:day);
}public static void main(String[] args) {Date date new Date();//实例化一个datedate.setDate(1999,1,1);//调用setDate方法,传参 1999,1,1// 然后进入该方法y,m,d根据方法里的内容赋值Date date2 new Date();//又实例化一个date2date2.setDate(2000,2,2);//调用setDate方法,传参 2000,2,2date.print();date2.print();}
}例子2this区分局部变量和引用对象。 给当 传入的形参名与被赋值的对象名不同时加不加this没有任何影响打印出来时正常的。 相同时例如此时形参名year和对象名 year相同此时赋值受局部变量优先的影响形参year自己给自己赋值 这样打印的结果就不是正常的 得到的结果 public class Date {
//属性public int year;//public int year 2023;//一般不写值写了相当于默认值public int month;public int day;
//方法public void setDate(int year,int month,int day){year year;month month;day day;public void print(){System.out.println(year:year month:month day:day);
}public static void main(String[] args) {Date date new Date();//实例化一个datedate.setDate(1999,1,1);//调用setDate方法,传参 1999,1,1// 然后进入该方法y,m,d根据方法里的内容赋值Date date2 new Date();//又实例化一个date2date2.setDate(2000,2,2);//调用setDate方法,传参 2000,2,2date.print();date2.print();}
}例子3建议给对象都加上this. 又得到了预期的结果 所以建议以后写都加上this避免这些容易犯的错误 public class Date {
//属性public int year;//public int year 2023;//一般不写值写了相当于默认值public int month;public int day;
//方法
public void setDate(Date this,int year,int month,int day){this.year year;this.month month;this.day day;
} public void print(){System.out.println(year:year month:month day:day);
}public static void main(String[] args) {Date date new Date();//实例化一个datedate.setDate(1999,1,1);//调用setDate方法,传参 1999,1,1// 然后进入该方法y,m,d根据方法里的内容赋值Date date2 new Date();//又实例化一个date2date2.setDate(2000,2,2);//调用setDate方法,传参 2000,2,2date.print();date2.print();}
}三、对象的构造及初始化
1.初始化对象 1.通过引用赋值来初始化 在定义属性的时候一般不赋值也就是不初始化。 与局部变量不同局部变量在使用前必须初始化否则会报错。
而成员变量没有初始化时有一个默认值。比如int - 0,float - 0.0f,double - 0.0,boolean - falsechar - \u0000
引用类型例如String - null 2.就地初始化定义成员变量的同时初始化。一般不用 就地初始化有特殊的业务需求比如任何一次对象的实例化之后都期望这个对象叫张三
或者年龄都是9 class Student{public String name ;//没有初始化默认为nullpublic int age ;//没有初始化默认为0
//public String name 张三;
//public int age 9;public void eat() {System.out.println(this.name吃饭);}public void show(){//this.eat();//可以在成员方法里调用另一个成员方法System.out.println(姓名this.name 年龄this.age);}
}public class Test {public static void main(String[] args) {/*** 实例化对象*/Student student new Student();//同过对象的引用来初始化student.name zhangsan;student.age 10;student.show();System.out.println();Student student2 new Student();student2.name lisi;student2.age 15;student2.show();}
}2.构造方法
构造方法(也称为构造器)是一个特殊的成员方法名字必须与类名相同在创建对象时由编译器自动调用并且 在整个对象的生命周期内只调用一次。 构造方法非常特殊 1.没有返回值 2.方法名必须和类名一样 特性 1. 名字必须与类名相同 2. 没有返回值类型设置为 void 也不行 3. 创建对象时由编译器自动调用并且在对象的生命周期内只调用一次 ( 相当于人的出生每个人只能出生一次 ) 4. 构造方法可以重载 ( 用户根据自己的需求提供不同参数的构造方法 ) 这是当前类 这是类里写的构造方法 (1) 不带参数的构造方法
class Student{public String name ;//没有初始化默认为null// 就地初始化定义成员变量的同时初始化。public String name 张三public int age ;//没有初始化默认为0 //public int age 9public void eat() {System.out.println(this.name吃饭);}public void show(){//this.eat();//可以在成员方法里调用另一个成员方法System.out.println(姓名this.name 年龄this.age);}//构造方法public Student(){this.name 鼠标;this.age 9;System.out.println(构造方法Student());}
}
public class Test {public static void main(String[] args) {Student student new Student();student.show();}}1.这个构造方法是如何被调用的 运行代码时发现调用show方法之前先调用了构造方法Student 在new Student这先调用了构造方法public Student然后在这个构造方法里赋值了打印了 ”构造方法Student“这个内容。然后调用了student.show将属性打印出来 姓名鼠标 年龄9 2.那为什么之前没有写构造方法的时候也能正常执行show方法呢 因为当我们没有写任何一个构造方法的时候Java会自动提供一个不带参数的构造方法。就是这个样子 public Student(){} (2) 带参数的构造方法 1.构造方法可以有多个 且 构造方法之间构成重载关系 class Student{public String name ;//没有初始化默认为null// 就地初始化定义成员变量的同时初始化。public String name 张三public int age ;//没有初始化默认为0 //public int age 9public void eat() {System.out.println(this.name吃饭);}public void show(){//this.eat();//可以在成员方法里调用另一个成员方法System.out.println(姓名this.name 年龄this.age);}/*** 构造方法*///不带参数的构造方法public Student(){this.name 鼠标;this.age 9;System.out.println(不带参数的构造方法Student());}//带参数的构造方法public Student(String name,int age){this.name name;this.age age;System.out.println(带参数的构造方法Student(String,int));}
}
public class Test {public static void main(String[] args) {Student student new Student();student.show();System.out.println();Student student2 new Student(小明,19);student2.show();}}运行结果 可以发现 1.构造方法可以有多个 2.构造方法之间构成重载关系 2.一旦自己写了构造函数编译器不会自动提供了 假如此时把不带参数的构造方法删掉就会报错了 class Student{public String name ;//没有初始化默认为null// 就地初始化定义成员变量的同时初始化。public String name 张三public int age ;//没有初始化默认为0 //public int age 9public void eat() {System.out.println(this.name吃饭);}public void show(){//this.eat();//可以在成员方法里调用另一个成员方法System.out.println(姓名this.name 年龄this.age);}/*** 构造方法*///带参数的构造方法public Student(String name,int age){this.name name;this.age age;System.out.println(带参数的构造方法Student(String,int));}
}
public class Test {public static void main(String[] args) {Student student new Student();student.show();System.out.println();Student student2 new Student(小明,19);student2.show();}}不是说编译器会自动提供不带参数的构造方法吗这里为什么又会报错呢 原因很简单当一个构造函数都没有的情况下才会默认自动提供一个不带参数的 构造方法。目前没有不带参数的构造方法但是有一个带参数的构造方法就不会提供了。 以自己编写的这个带参数的构造方法为主此时new Student()实例化一个新的对象里面没有带参数而自己写的那个是带参数的所以就报错了。 3.构造函数快捷键生成 如果有太多构造函数需要编写IDEA有一个快捷键一键生成。 快捷键 altinsert 或者 鼠标右键 4.使用this在构造方法内调用其他构造方法 this这个语法只能出现在构造方法当中 只能出现在当前构造方法的第一行 注意不能自己调用自己 成功调用 只能出现在构造方法的第一行 下面这个就错了 4this引用的小总结 1.this.成员变量 2.this.成员方法 3.this在构造方法里调用其他构造方法 注意this代表当前对象的引用而不是当前对象。 因为实例化对象的重要两步是 1.为对象分配内存 2.调用合适的构造方法 而在调用构造方法的时候this还在其中使用所以是对当前对象的印象