本文最后更新于2022年6月1日,已超过 1 年没更新!内容可能已失效,请自行测试。
成员属性封装
在类之中的组成就是属性与方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性由于其需要较高的安全性,所以往往需要对其进行保护,这个时候就需要采用封装对属性进行保护
默认情况下,对于类中的属性可以通过其它类的对象进行调用的
案例代码-调用
class Person {
String name; // 人员姓名
int age; // 人的年龄
public void tell() {
System.out.println("姓名" + name + "年龄" + age);
}
}
public class PackgeDemo {
public static void main(String[] args) {
Person per = new Person(); // 声明并实例化对象
per.name = "张三"; // 在类外部修改属性
per.age = 18; // 在类外部修改属性
per.tell(); // 调用方法
}
}
此时Person类中提供的name和age两个属性并没有进行封装处理,这样外部就可以直接进行调用,但是有可能设置的数据是错误的数组.想解决这样的问题就需要private关键字
案例代码-封装
class Person2 {
private String name; // 人员姓名
private int age; // 人的年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class PackgeDemo2 {
public static void main(String[] args) {
Person2 per = new Person2(); // 声明并实例化对象
per.setName("张三"); // 在类外部修改属性
per.setAge(20); // 在类外部修改属性
System.out.println(per.getName() + per.getAge());
}
}
提供private修饰后,需要提供相对应的set,get方法用于外部获取属性
构造方法与匿名对象
目前的程序在使用类的时候一般都按照了如下步骤进行
- 声明并实例化对象,此时实例化对象中的属性并没有任何的数据存在,都是其对应数据类型的默认值
- 需要通过set方法为类中的属性设置内容
要想真正获得一个可以正常使用的实例化对象,需要经过两个步骤
可以通过构造方法实现实例化对象中的属性初始化处理
案例代码-构造方法
class Person3 {
private String name; // 人员姓名
private int age; // 人的年龄
// 方法名称与类名称相同,且无返回值
public Person3(String n, int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Constructors {
public static void main(String[] args) {
Person3 per = new Person3("张三", 20); // 声明并实例化对象
System.out.println(per.getName() + per.getAge());
}
}
所有的类都会提供构造方法,也就是说如果没有自定义任何构造方法,系统会在编译的时候自动创建一个
案例代码-构造方法重载
class Person4 {
private String name; // 人员姓名
private int age; // 人的年龄
// 方法名称与类名称相同,且无返回值
public Person4() {
name = "shh";
age = 20;
}
public Person4(String n) {
name = n;
age = 20;
}
public Person4(String n, int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Constructors2 {
public static void main(String[] args) {
Person4 per = new Person4("张三", 20);
Person4 per2 = new Person4("李四"); // 声明并实例化对象
System.out.println(per.getName() + per.getAge());
System.out.println(per2.getName() + per2.getAge());
}
}
案例代码-匿名对象
public class Anonymous {
public static void main(String[] args) {
new Person4("张三", 20).tell();
}
}
此时通过对象进行类中方法的调用,但是由于此对象没有任何的引用,所以使用一次之后就会成为垃圾,所有的垃圾将被GC进行回收释放
Comments | NOTHING