⒈.面向对象的初步认知
⑴什么是面向对象:面向对象的方法主要是把事物给对象化,包括其属性和行为。面对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
⑵面向对象与面向过程
☀以洗衣服举例解释
①面向对象:不需要关注洗衣服的过程
◎总共有四个对象:人,衣服,洗衣粉,洗衣机,
◎整个过程主要是:人,衣服,洗衣粉,洗衣机,四个对象之间交互完成的,人不需要管洗衣机具体洗衣服的,是如何甩干的
卍 eg:
②面向过程:注重的是洗衣服的过程
◔缺点:扩展或者维护会比较麻烦
2.类的定义和使用
⑴简单认识类:类就是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观,尺寸等)也就是成员变量,哪些功能(用来干啥)也就是成员方法,描述完后计算机就可以识别了(就是可以New一个对象啦)。
⑵类的定义格式:java中定义类时需要用到class关键字;class为定义类的关键字。class Name为类的名字,{} 中为类的主体;
◮注意:
☯类名注意采用大驼峰定义!
☯此处写的方法不带static关键字;后面解释!
✍练习:
➷定义一个狗类;
➷定义一个学生类;
Dog 类 代码演示:
class Dog {
// 字段(属性)或者 成员变量
public String name ;
public String color;
// 行为或者成员方法
public void barks() {
System.out.println(name+":旺旺旺~~~");
}
public void wag() {
System.out.println(name+":摇尾巴~~~");
}
public void show() {
System.out.println("名字: "+name + " 颜色: "+color);
}
}
public class HolidayDemo14 {
public static void main(String[] args) {
//实例化对象
Dog baby = new Dog();
baby.name = "小哥";
baby.color = "黑色";
baby.show();
baby.barks();
baby.wag();
}
}
Dog类代码运行结果:
学生类--代码演示:
class Xstudent{
//成员变量
public String name;
public int age ;
public double score;
//成员方法
public void DoClass() {
System.out.println(name+"正在学习");
}
public void Exam() {
System.out.println(name+"正在考试");
}
public void Show() {
System.out.println("姓名:"+name+" 年龄:"+age+" 分数:"+score);
}
}
public class HolidayDemo14{
public static void main(String[] args) {
Xstudent student = new Xstudent();
student.name = "圣瞳";
student.age = 20;
student.score = 99.99;
student.DoClass();
student.Exam();
student.Show();
}
}
学生类代码运行结果:
◮注意:
☯一般一个文件中只定义一个类
☯main 方法所在的类一般要使用public修饰
☯不要轻易修改public修饰的名称
3.类的实例化
⑴什么是实例化:用类类型创建(或者用new实例化)对象的过程,称为类的实例化
◮注意:
☯new关键字用于创建一个对象的实例
☯使用 “ . ” 来访问对象中的属性和方法
☯同一个类可以创建多个实例
⑵类和对象的说明
①类只是一个模型
②类是一种自定义的类型
③一个类可以实例化多个对象,实例化出的对象,占用实际的物理空间,存储类成员变量
④比如:类实例化出对象就像现实中使用建筑设计图造出房子,类就像是设计图
4.this 引用▲(差个代码演示)
⑴什么是this引用:java编译器给每个“成员方法”增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有变量的操作,都是通过该引用去访问。(不用用户传递,编译器自动完成)
⑵this引用的特性:
①this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
②this只能在“成员方法”中使用
③在“成员方法中” this只能引用当前对象,不能再一引用其他对象具有file属性
④this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责调用成员方法对象的引用传递给成员方法,this来接收
ி带有this的代码(不懂可问-实在很难写出来思想路线):
class Cat2{
//成员变量
public String name;
public int age;
public String color;
//成员方法
public Cat2(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
public void eat() {
System.out.println(this.name+"正在吃饭!");
}
public void sleep() {
System.out.println(this.name+" 正在睡觉!");
}
/**
* 打印我们的属性
*/
public void show() {
System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 颜色:"+this.color);
}
/**
*
* @return
*/
@Override
public String toString() {
return "Cat{" +
"姓名='" + name + '\'' +
", 年龄=" + age +
", 颜色='" + color + '\'' +
'}';
}
}
public class HolidayDemo15{
public static void main(String[] args) {
Cat2 cat = new Cat2("xiaobo",22,"black");
System.out.println(cat.toString());
cat.eat();
cat.sleep();
}
5.对象的构造及初始化
⑴如何初始化对象:通过构造方法,默认初始化,就地初始化(不推荐)
⑵构造方法:名字必须与类名相同,在创建对象时,编译器自动调用这个方法并在整个对象的生命周期类只调用一次
⑶构造方法的特性:
①名字必须与类名相同
②没有返回值类型,设置为void也不行
③创建对象时由编译器自动调用,并且在对象的生命周期类只调用一次
④构造方法可以重载(名字相同, 参数列表不同,因此构成了方法重载)
⑤如果用户没有显示定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的
⑥绝大多数使用public来修饰,特殊场景会被private修饰
◮注意:
☯一旦用户定义,则编译器不再生成
☯this (...)必须是构造方法中第一句
☯不能成环
☂有个谱
㉿构造方法 是没有返回值的方法,方法和类名是一样的
㉿构造方法 不只一个,可以有多个,多个构造方法之间构成了重载
㉿当我们写了一个类之后,没有写构造方法的时候,编译器会帮我们默认生成一个不带参数的构 造方法
㉿当我们写了任何一个构造方法之后,编译器不再为我们提供不带参数的构造方法
㉿一个类 至少会有一个构造方法就算你没写!!!
㉿构造方法 本质就是来实例化对象的时候调用(❶.分配内存 ,❷调用合适的构造方法)
㉿this可以用来调用本类中 其他的构造方法【构造方法当中使用】,必须放到第一行!!!所 以,只能在当前构造方法之中调用一个
㉿this的用法:❶this.date 访问属性 ❷this.func() 访问方法 ❸this() 调用本类中其他的 构构造方法
㉿this不能形成环
ிl顺便看看代码悟一悟吧
class Student1 {
//属性:成员变量-》类的内部 方法的外部的
public String name;
public int age;
public double score;
public String sex;
public Student1() {
//调用本类中 带有2个参数的构造方法,第一个参数的类型是String,第2个参数的类型是int
this("圣瞳", 20);
System.out.println("这个是不带参数的构造方法!");
}
public Student1(String name, int age) {
//this();
this.age = age;
this.name = name;
System.out.println("这个是带2个参数的构造方法!");
}
public void show() {
System.out.println("姓名: "+this.name+" 年龄"+this.age);
}
public static class HolidayDemo15 {
public static void main(String[] args) {
Student1 student = new Student1();
student.show();
}
}
}
代码结果:
☏个人所得【牢记】使用构造方法与不使用构造方法的区别点(new的时候)
✈使用构造方法的时候
✈不使用构造方法时的new以及赋值问题