正是风雨欲来的时候,火却越烧越旺了? ? ?
???????????? ?????????????????????????????——24.1.20
1.为何使用面向对象思想编程
2.如何使用面向对象思想编程
3.何时使用面向对象思想编程
4.利用代码去描述世间万物的分类
5.在一个类中访问另外一个类中的成员 -> new对象
6.成员变量和局部变量的区别
1.面向过程:自己的事情自己干,代表语言:C语言
? ? ? ??????????eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣
2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言
? ? ? ? ? ? ? ? eg、洗衣服:自己的事情别人干 -> 全自动洗衣机
3.使用面向对象思想编程:方便快捷
? ? ? ? ? ? ? ? 很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量
4.什么时候使用面向对象思想编程:
? ? ? ? ? ? ? ? 调用别人的功能时
? ? ? ? ? ? ? ? 在一个类中想使用别的类中的思想时,就使用面向对象思想编程
? ? ? ? ? ? ? ? 至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可
5.如何使用面向对象思想编程:
? ? ? ? ①new,new. -> 点代表的是调用
? ? ? ? ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可
1.测试类:带main方法的类,主要是运行代码的
2.实体类:是一类事物的抽象表示形式
? ? ? ? ? ? ? ? ?世间万物的分类:比如:犬类、人类、猫类、鼠标类
? ? ? ? 组成部分:
? ? ? ? ? ? ? ? 1.属性(成员变量):这一类事物有什么
? ? ? ? ? ? ? ? ? ? ? ? ①定义位置:类中方法外
????????????????????????②作用范围:作用于当前类
? ? ? ? ? ? ? ? ? ? ? ? ③定义格式:数据类型 变量名
? ? ? ? ? ? ? ? ? ? ? ? ④默认值:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 整数:0? ? ? ? 小数:0.0? ? ? ? 字符:'\U0000‘? ? ? ? 布尔:false? ? ? ? 引用:null
? ? ? ? ? ? ? ? 2.行为(成员方法):这一类的事物能干嘛
? ? ? ? ? ? ? ? ? ? ? ? 只需要将方法中所学的static干掉,其他的都一样
只需要将某个分类的属性和行为描述出来,就可以描述这个类
案例
人类
public class Demo65Object02Person {
//属性 -> 成员变量
String name;
int age;
//行为 -> 成员方法
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
}
动物类
public class Demo66Object03Animal {
String kind;//品种
String color;//颜色
public void eat(){
System.out.println("动物要吃东西");
}
public void sleep(){
System.out.println("动物要睡觉");
}
小明类
public class Demo67Object04Phone {
//属性
String brand;
String color;
int price;
//行为
public void call(String name){
System.out.println("给"+name+"打电话");
}
public String message(){
return "给小明发短信";
}
1.概述:一类事物的具体体现
2.使用:
? ? ? ? ①导包
? ? ? ? ? ? ? ? 如果两个类在同一个包下,想要使用对方的成员不需要导包
? ? ? ? ? ? ? ? 如果两个类不在同一个包下,想要使用对方的成员需要导包
? ? ? ? ? ? ? ? 特殊包:java.lang -> 使用lang包下的类,不需要导包 -> String
? ? ? ? ? ? ? ? 注:在学习四种权限修饰符前,尽量让两个类在同一个包下
? ? ? ? ②创建对象:想要使用哪个类中的成员,就new哪个类的对象
? ? ? ? ? ? ? ? 类名 对象名 = new 类名() -> 如:Person person = new Person();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Animal animal = new Animal();
? ? ? ? ③调用成员(成员变量、成员方法) -> 想要使用哪个类中的成员,便用哪个类的对象去点哪个成员
? ? ? ? ? ? ? ? 对象名.成员变量名 = 值
? ? ? ? ? ? ? ? 对象名.方法名() -> 调用的是无参无返回值的方法
? ? ? ? ? ? ? ? 对象名.方法名(实参)-> 调用的是无参有返回值的方法
? ? ? ? ? ? ? ? 数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值的方法
????????????????数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值的方法
public class Demo65Object02Person {
//属性 -> 成员变量
String name;
int age;
//行为 -> 成员方法
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
}
public class Demo66Object03Animal {
String kind;//品种
String color;//颜色
public void eat(){
System.out.println("动物要吃东西");
}
public void sleep(){
System.out.println("动物要睡觉");
}
}
public class Demo67Object04Phone {
//属性
String brand;
String color;
int price;
//行为
public void call(String name){
System.out.println("给"+name+"打电话");
}
public String message(){
return "给小明发短信";
}
}
public static void main(String[] args) {
Demo65Object02Person p = new Demo65Object02Person();
p.age = 21;
p.name = "小明";
p.drink();
p.eat();
System.out.println(p.age);
System.out.println(p.name);
System.out.println("—————————————————————————————————————————————");
Demo66Object03Animal a = new Demo66Object03Animal();
a.color = "白色";
a.kind = "金毛巡回犬";
a.sleep();
a.eat();
System.out.println(a.color);
System.out.println(a.kind);
System.out.println("————————————————————————————————————————————");
Demo67Object04Phone ph = new Demo67Object04Phone();
ph.brand = "oppo findx3pro";
ph.color = "white";
ph.price = 5799;
ph.message();
ph.call("张三");
System.out.println(ph.brand);
System.out.println(ph.color);
System.out.println(ph.price);
ph.call("小明");
ph.message();
}
用代码描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能
public class Demo67Object04Phone {
//属性
String brand;
String color;
int price;
//行为
public void call(String name){
System.out.println("给"+name+"打电话");
}
public String message(){
return "给小明发短信";
}
}
public static void main(String[] args) {
Demo67Object04Phone phone = new Demo67Object04Phone();//手机类类名
phone.brand = "OPPO Findx3Pro";
phone.price = 5599;
phone.color = "白色";
System.out.println(phone.brand);
System.out.println(phone.price);
System.out.println(phone.color);
phone.call("小明");
phone.message();
}
1.int i = 10;
? ? ? ? ①int:是数据的类型
? ? ? ? ②i:变量名
? ? ? ? ③等号右边的10:真正的数据
2.Person p = new Person()
? ? ? ? ①等号左边的Person:对象的类型,好比是int
? ? ? ? ②p:对象名
? ? ? ? ③等号右边的new Person:真正的数据,是一个Person对象,将这个对象真正创建出来了
1.所谓的匿名对象,其实就是没有等号左边的部分,只有等号右边的部分(对象)
2.使用:
? ? ? ? new 对象().成员
3.注意:
? ? ? ? ①如果只想单纯的调用一个方法,让方法执行,我们可以考虑匿名对象
? ? ? ? ②但是如果涉及到赋值,千万不要使用匿名对象
示例
public class Demo65Object02Person {
//属性 -> 成员变量
String name;
int age;
//行为 -> 成员方法
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
}
public class Demo70Object07PersonNoName {
public static void main(String[] args) {
//原始方式
Demo65Object02Person p = new Demo65Object02Person();
p.name = "小明";
System.out.println(p.name);
p.eat();
System.out.println();
//匿名对象方式
new Demo65Object02Person().eat();
}
}
//匿名对象方式:
new Demo65Object02Person().eat();
new Demo65Object02Person().name = "小红";
System.out.println(new Demo65Object02Person().name); //null
//无法输出
涉及到赋值,千万不要使用匿名对象
phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空间,修改自己空间中的数据不会影响其他空间中的数据
? ??
phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和phone1的地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响另一个对象
1.定义位置不同*
? ? ? ? 成员变量:类中方法外
? ? ? ? 局部变量:方法之中或者参数位置
2.初始化值不同*
? ? ? ? 成员变量:有默认值,不用手动赋值,可以直接使用
? ? ? ? 局部变量:没有默认值,必须手动先赋值,才能使用
3.作用范围不同*
? ? ? ? 成员变量:作用于整个类
? ? ? ? 局部变量:只作用于自己所在的方法,其他方法用不了
4.内存位置不同
? ? ? ? 成员变量:在堆中,跟着对象走
? ? ? ? 局部变量:在栈中,跟着方法走
5.生命周期不同
? ? ? ? 成员变量:随着对象的产生而产生,随着对象的消失而消失
? ? ? ? 局部变量:随着方法的调用而产生,随着方法的调用完毕而消失
定义一个类MyDate,属性有year、month、day
? ? ? ? 在定义一个Citizen(公民类),属性有name(String类型),birthday(MyDate类型),idcard(string类型),为这三个属性赋值,然后将值取出
//自定义生日类型
public class Demo71Object08MyDate {
int year;
int month;
int day;
}
//自定义公民类
public class Demo72Object09Citizen {
//姓名
String name; //默认值null
// 生日 Mydate类型
// Mydate属于自定义类型(引用数据类型)
// 这种类型要操作之前,必须要赋值
// 这种自定义对象,需要new对象赋值
Demo71Object08MyDate birthday; //默认值null
//身份证
String idcard; //默认值null
}
public static void main(String[] args) {
Demo72Object09Citizen citizen = new Demo72Object09Citizen();
citizen.name = "张三";
citizen.idcard = "04214047";
citizen.birthday = new Demo71Object08MyDate();
/*Stringbuilder
citizen.birthday获取的是Mydate对象
再去点year获取的是Mydate对象中的year
链式调用
*/
citizen.birthday.year = 2002;
citizen.birthday.month = 11;
citizen.birthday.day = 4;
System.out.println(citizen.name + "," + citizen.birthday.year + "年"
+ citizen.birthday.month + "月" + citizen.birthday.day + "日 " + "学号:" + citizen.idcard);
}
?
给自定义的类型(引用数据类型)赋值,需要new对象(String比较特殊,可以直接=赋值)