第一章 类和对象的关系
1、两种思想
1. 两种思想:
A. 面向过程(所有的事情都是自己做,亲力亲为)
B. 面向对象(找人帮我们做事情,人就是对象,它具备做事情的功能)
2. 举例:
打游戏,上王者。分为两种情况:
a. 自己打,从黑铁到青铜到白银....到王者。(所有的事情都要自己去做,太累了)
b. 找代练帮我上王者。(代练就是对象,只需要提供对应的钱数据,它会有功能帮我实现)
谁是对象?具备有此功能的人或者物品。
2、对应关系
现实世界 Java世界
=======================================================
手机设计图纸 -----------------> 手机类 class Phone{ ... }
具体的某个手机 ----------------> 手机对象 Phone iphonex = new Phone();
尺寸、颜色 --------------------> 成员变量(属性) int size; String color;
打电话、发短信 -----------------> 成员方法(行为) public void call(){ ...} public void send(){...}
3、类的定义
类当中包含以下内容:
1. 成员变量(写在类中,方法外的变量)
2. 成员方法(以前的方法,去掉 static 关键字)
4、类的使用
使用方式: "创建对象,调用成员"
1. 创建对象
格式: 类名称 对象名称 = new 类名称();
例如: Student stu = new Student();
2. 调用成员(成员变量和成员方法)
A. 成员变量的调用格式: 对象名称.成员变量名称 // stu.age
B. 成员方法的调用格式: 对象名称.成员方法名称(参数); //stu.eat();
第二章 内存图
1、结论
结论: 如果方法的参数是类或者数组(引用数据类型)。在方法当中对数据进行修改之后,调用方法的位置是会受到影响的。
生活实例: 你和你的同桌共用一个水杯,你喝了一口,同桌看到少一口,接下来,往里面加一口口水,是有影响的!
对象类型作为方法的参数和返回值的时候:(了解即可)
如果方法的参数是对象类型。那么传递的是 对象地址值。
如果方法的返回值是对象类型。那么返回的结果是 对象的地址值。
2、成员变量和局部变量
1. 宏观方向(肉眼可以看到的角度)
A. 成员变量: 在类中,方法外的变量
B. 局部变量: 在方法当中的变量,或者是方法定义的小括号上面参数
2. 微观方向(计算机的内存角度)
A. 成员变量: 堆内存,跟着对象走"对象在,成员在。对象亡,成员亡"。 堆内存当中有'默认值'
B. 局部变量: 栈内存,跟着方法走"方法在,局部在。方法亡,局部亡"。 栈内存当中没有 默认值
第三章 封装性
1、封装性概述
1. 面向对象三大特性
A. 封装性
B. 继承性
C. 多态性
2. 常见的封装方式(类当中有 成员变量和成员方法)
A.成员方法就是一种封装(封装了一些细节的代码)
B.成员变量的封装,采用的是 private 关键字 (private:私有的)
2、private关键字的由来及使用
1. 为什么需要使用 private 关键字?
简单一点说,提高代码的数据安全性。(数据不安全:数据不符合现实生活需求)
如果不采用 private 关键字。我们是可以使用 对象名称.成员变量名称赋值的。例如: stu.age = -20;
从Java语法角度而言是没有问题的。但是从现实生活的角度而言,存在问题,一个人的年龄不能是负数!!
直接赋值不符合现有的需求,所以需要使用 private 关键字把 成员变量 封装隐藏起来。不能直接打点调用。
这里又会存在一个问题,如果我想要给成员变量赋值,合理的数据值,也不能正确赋值,应该怎么解决?
采用间接的方式赋值,提供一组 getter 和 setter 方法,取值和存值。(getter 是取值,setter 是存值)
2. 如果使用 private 关键字?
A. 给成员变量的前面加上 private 关键字
B. 提供一组 getter 和 setter 方法
3、this关键字
1. this 关键字的有什么用?
当成员变量 和 局部变量,名称相同的情况下。进行区分。
加上 this 的是成员变量
不加 this 的是局部变量。
2. 就近原则:
谁离我近一点,我就使用谁。
4、构造方法
1. 构造方法的作用?为什么要使用构造方法?
两个作用:
A.无参构造方法。主要是创建对象。
B、全参构造方法。既可以创建对象,也可以给成员变量赋值。
2. 构造方法的调用时机是什么时候?什么时候在调用构造?
创建对象的时候,就是调用构造方法的时候。
问题: 成员方法和构造方法,谁先调用?
构造方法先调用。"创建对象,调用成员"//创建对象在前(创建对象就是调用构造方法)
3. 构造方法的特点: (两点同时满足) 如何辨别构造方法?
A. 方法名称和类名称相同。
B. 没有返回值类型,也不要写 void 直接留空。
//例如: 类的名称叫做 Student. 那么构造方法的写法: public Student(){ ... }
4. 构造方法的注意事项:
A.如果我们没有写构造方法,系统会默认赠送你一个无参构造方法,只是你看不到而已。作用给你创建对象
B.如果我们书写了构造方法,系统将不再赠送你构造方法。
5、综合案例
标准类
//定义标准类
//1.成员变量(private修饰)
//2.构造方法(无参构造和全参构造)
//3.成员方法(getter和setter)
public class Cat {
//成员变量
private String name;
private int age;
//无参构造
public Cat() {
}
//全参构造
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
//成员方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类
//测试类 "创建对象,调用方法"
public class Test {
public static void main(String[] args) {
//方式1: 无参构造 + setXxx()方法
Cat cat01 = new Cat(); //无参构造创建对象
cat01.setName("加菲猫"); //存值
cat01.setAge(3); //存值
String name1 = cat01.getName(); //取值
int age1 = cat01.getAge();//取值
//打印输出结果, name1:加菲猫,age1:3
System.out.println("name1:"+name1+",age1:"+age1);
System.out.println("===========================");
//方式2: 全参构造
Cat cat02 = new Cat("汤姆猫",2);
String name2 = cat02.getName();//取值
int age2 = cat02.getAge();//取值
//打印输出结果, name2:汤姆猫,age2:2
System.out.println("name2:"+name2+",age2:"+age2);
}
}