本周学习了面向对象中的基础知识,一开始只是学习基础概念,对其中的理解并不深入,学习很吃力,后来在老师和同学的讲解下试着理解,现在将理解整理如下:
- 万物实体皆可为对象,类则是具有具有共同属性和行为的事物的抽象。
- 类是抽象的对象,对象是实体化了的类
- 属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
类的定义步骤:
//定义类
public class Phone {
//编写类的成员变量
String brand;
int price;
// 编写类的成员方法
public void call(){
System.out.println("打电话");
}
public void sendMessage(){
System.out.println("发短信");
}}
对象的使用:
package com.object_01;
public class PhoneDemo {
public static void main(String[] args) {
/*创建对象
格式:类名 对象名 = new 类名();*/
Phone p = new Phone();
/*使用对象
1:使用成员变量
格式:对象名.变量名*/
System.out.println(p.brand);
//调用变量brand,因为未赋值,此时返回堆堆内存默认值,String类型默认值“null”
System.out.println(p.price);
//price同上,int类型默认值“0”
//如果赋值
p.brand = "华为";
p.price = 2999;
//再次输出
System.out.println(p.brand);
System.out.println(p.price);
/*2:使用成员方法
格式:对象名.方法名()*/
p.call();
p.sendMessage();
}
}
-
栈内存(存储局部变量) 定义在方法中的变量,例如:arr 使用完毕,立即消失 堆内存(存储成员变量) 存储new出来的内容(实体,对象) 数组在初始化时,会为存储空间添加默认值数组在初始化时,会为存储空间添加默认值 整数:默认值0 浮点数:默认值0.0 布尔值:默认值false 字符:默认值是空字符 引用数据类型(String):默认值是null 每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收
- 成员变量:类中方法外的变量
局部变量:方法中的变量 - 关键字private的使用:
一开始只是单纯的知道这是一个权限修饰符,后面理解以后知道它既可以修饰成员变量又可以修饰成员方法,保护被它修饰的成员不被其他的类使用,也就是说对于别的类来说是隐藏不可见的,确保成员只能在本类被访问。
若想要在其他类中访问被private保护的成员,可以通过:
提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
具体使用如下:
一开始我定义了公开的变量eat 和 dress的花费,隐藏了动漫周边animePeripheral的花费,若是直接在测试类里调用则会隐藏animePeripheral,不可见。
所以要用setter 设置、getter 获取成员变量的值。
在 setAnimePeripheral 方法中,我们定义成员变量发现没有这种定义方法,a = a ×
于是我们引入了this 关键字,解决局部变量隐藏成员变量。
最后代码展示如下:
package com.object_09;
//声明一个花费类型Cost
public class Cost {
//成员变量
public int eat; //公开一个吃的花费
public int dress; //公开一个穿的花费
private int animePeripheral = 250; //隐藏一个动漫周边的花费
// 关键字private作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
//针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
//提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
//提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
//成员方法
public void show(){
System.out.println(eat+dress);
}
public void setAnimePeripheral(int animePeripheral) {
this.animePeripheral = animePeripheral;
}
public int getAnimePeripheral() {
return animePeripheral;
}
}
package com.object_09;
//花费类的测试
public class CostDemo {
public static void main(String[] args) {
//创建对象
Cost c = new Cost();
//赋值并使用变量
c.eat = 1000;
c.dress = 200;
//使用方法
c.show();
c.setAnimePeripheral(500); 提供“set变量名(参数)”方法,用于设置成员变量的值
System.out.println(c.getAnimePeripheral()); //打印最后赋值的AnimePeripheral
}
}
运行结果: