一、面向对象
1.面向对象的思想概述
面向过程:强调的是过程,也就是完成功能的每一个步骤都需要自己亲力亲为
面向对象:强调的是对象,也就是使用对象来帮我们去完成功能
2.生活中举例
吃烤鸭:
面向过程:买一只小鸭苗–>买饲料–>开始养–>养大了–>杀掉–>拔毛–>腌制一下–>买一个烤炉–>烤一烤–>开吃–>刷碗
面向对象:到全聚德–>点一份烤鸭–>开吃–>走人
3.面向对象思想的好处:
A:将复杂的事情简单化
B:可以将程序员由执行者变成指挥者
C:更符合人们思想习惯的思想(懒人思想)
4.面向对象的三大特征
封装
继承
多态
5.类和对象之间的关系
类:
(今日所学):就是指一组事物的属性和行为的集合。也是一种抽象的泛泛的概念
举例:
猫:属性和行为的集合
(今后所学):物以类聚。例如:动物类、水果类、植物类、人类....
对象:
(今日所学):就是指某个事物的具体体现。
举例:
波斯猫,年龄是3岁。颜色是黑白色。它可以抓老鼠
加菲猫:年龄是2岁。颜色是花色。它可以睡懒觉
(今后所学):对象就是指某一类事物中的具体的对象。例如:
动物类:猫、狗、猪
水果类:苹果、香蕉
属性(成员变量):就是指事物的一些描述信息
行为(成员方法):就是指事物可以做哪些事情
6.定义一个类
//学生类
public class Student {
// 成员变量
String name; // 姓名
int age; // 年龄
// 成员方法
public void eat() {
System.out.println("吃饭饭!");
}
public void sleep() {
System.out.println("睡觉觉!");
}
public void study() {
System.out.println("学习!");
}
}
7.使用一个类
A:导包:idea会自动导包
B:创建对象:类名 对象名 = new 类名();
C:使用成员:对象名.成员变量 或者 对象名.成员方法
//使用学生类
public class Demo02Student {
public static void main(String[] args) {
// 1. 导包。
// 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包语句不写
// 2. 创建,格式:
// 类名称 对象名 = new 类名称();
// 根据Student类,创建了一个名为stu的对象
Student stu = new Student();
// 3. 使用其中的成员变量,格式:
// 对象名.成员变量名
System.out.println(stu.name); // null
System.out.println(stu.age); // 0
System.out.println("=============");
// 改变对象当中的成员变量数值内容
// 将右侧的字符串,赋值交给stu对象当中的name成员变量
stu.name = "赵丽颖";
stu.age = 18;
System.out.println(stu.name); // 赵丽颖
System.out.println(stu.age); // 18
System.out.println("=============");
// 4. 使用对象的成员方法,格式:
// 对象名.成员方法名()
stu.eat();
stu.sleep();
stu.study();
}
}
8.手机类的定义和使用
//手机类
public class Phone {
// 成员变量
String brand; // 品牌
double price; // 价格
String color; // 颜色
// 成员方法
public void call(String who) {
System.out.println("给" + who + "打电话");
}
public void sendMessage() {
System.out.println("群发短信");
}
}
//使用手机类
public class Demo01PhoneOne {
public static void main(String[] args) {
// 根据Phone类,创建一个名为one的对象
// 格式:类名称 对象名 = new 类名称();
Phone one = new Phone();
//为成员变量赋值
one.brand = "苹果";
one.price = 8388.0;
one.color = "黑色";
System.out.println(one.brand); // 苹果
System.out.println(one.price); // 8388.0
System.out.println(one.color); // 黑色
System.out.println("=========");
one.call("乔布斯"); // 给乔布斯打电话
one.sendMessage(); // 群发短信
}
}
二、对象的内存图解
略
栈内存特点:先进后出。方法调用时进栈。方法结束时弹栈!直接从栈内存消失
堆内存特点:只要有对象引用存在,就一直存在。如果没有任何对象指向它,就会变成垃圾。由垃圾回收器自动回收
三、将对象作为方法的参数和返回值使用
1.将对象作为方法的参数传递使用
重点:传递的是对象的地址值
public class Demo04PhoneParam {
public static void main(String[] args) {
Phone one = new Phone();
one.brand = "苹果";
one.price = 8388.0;
one.color = "土豪金";
method(one); // 传递进去的参数其实就是地址值
}
public static void method(Phone param) {
System.out.println(param.brand); // 苹果
System.out.println(param.price); // 8388.0
System.out.println(param.color); // 土豪金
}
}
2.将对象作为方法的返回值使用
重点:返回的是对象的地址值
public class Demo05PhoneReturn {
public static void main(String[] args) {
Phone two = getPhone();
System.out.println(two.brand); // 苹果
System.out.println(two.price); // 8388.0
System.out.println(two.color); // 玫瑰金
System.out.println(two);
}
public static Phone getPhone() {
Phone one = new Phone();
one.brand = "苹果";
one.price = 8388.0;
one.color = "玫瑰金";
System.out.println(one);
return one;
}
}
四、局部变量和成员变量的区别
1.定义位置区别:
成员变量:定义在类中方法外
局部变量:定义在方法内部或者方法的声明上
2.作用域不同:
成员变量:可以被类中的任意方法内访问到
局部变量:只能在当前的方法中去访问
3.初始化值不同
成员变量:有初始化值
局部变量:没有初始化值
4.在内存中的位置不同:
成员变量:在堆内存中
局部变量:在栈内存中
5.声明周期不同:
成员变量:随着对象的创建而创建,随着对象的消失而消失
局部变量:随着方法的调用而创建,随着方法的消失而消失
五、封装
1.什么是封装
封装指的就是将细节信息进行隐藏,不对外公开。
例如:
方法的定义,方法中如何实现的功能,作为调用者不需要关心
定义一个类,也是属于一种封装
private关键字,也是属于封装的一种
2.private 关键字
如果一个类当中的成员不想被外界直接访问到,那么就可以使用private关键字进行修饰
如果一个成员被private所修饰了,那么外界就无法直接访问了,如果还想通过外界对其进行访问,
那么就需要提供对应的get和set方法
3.this 关键字
作用:
用于区分局部变量和成员变量重名
代表的是当前对象的引用,谁来调用我,我就代表谁
六、构造方法
1.构造方法的定义格式:
public 方法名(){
}
注意事项:
A:构造方法的名字要和类名保持一致
B:构造方法没有返回值类型,连void都不能写
C:如果没有写任何构造方法,系统会默认提供一个无参数的构造方法
D:如果我们自己写了一个构造方法,那么系统就不再提供默认的无参构造方法了
七、完整的定义类和使用类
//狗类
public class Dog {
//成员变量
private String name; // 名字
private int age; // 年龄
private String color; // 颜色
public Dog() {
}
public Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
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 String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
//测试类
public class Test01 {
public static void main(String[] args) {
//通过空参构造创建对象
Dog d1 = new Dog();
d1.setName("哈士奇");
d1.setAge(3);
d1.setColor("黑白");
System.out.println(d1.getName());
System.out.println(d1.getAge());
System.out.println(d1.getColor());
System.out.println("==================");
//通过有参构造创建对象
Dog d2 = new Dog("金毛",4,"黄色");
System.out.println(d2.getName());
System.out.println(d2.getAge());
System.out.println(d2.getColor());
}
}