Java基础笔记(十四)——封装

时间:2024-01-19 22:31:56

封装(好比ATM机)

将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口)。

特点:

1.只能通过规定的方法访问数据。

2.隐藏类的实例细节,方便修改和实现。

实现步骤:

1.修改属性的可见性——设为private。

2.创建getter/setter方法——设为public,用于属性的读写(只读属性(无法修改)/只写属性(无法获取))。

3.在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。

封装前

public class Dog {
int age;
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog();
d.age=3;
System.out.println("年龄:"+d.age);
}
}
//运行结果
昵称:3

封装后

public class Dog {
private int age; public int getAge() {
return age;
} public void setAge(int age) {
if(age<0){
System.out.println("输入错误");
}else
this.age = age;
}
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog();
d.setAge(3);
System.out.println("年龄:"+d.getAge());
Dog d1=new Dog();
d1.setAge(-3);
System.out.println("年龄"+d1.getAge());//因为没有赋值成功,所以值为默认初始值0
Dog d2=new Dog();
d1.setAge(-5);
if(d1.getAge()==0) //简单地加个判断处理
return;
System.out.println("年龄"+d1.getAge());
}
} //运行结果
年龄:3
输入错误
年龄0
输入错误

用带参构造函数给对象的属性赋值

public class Dog {
private int age;
public Dog(int age){
this.setAge(age); //这里若用this.age=age;则不能判断是否输入错误
}
public int getAge() {
return age;
} public void setAge(int age) {
if(age<0){
System.out.println("输入错误");
}else
this.age = age;
}
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog(3);
if(d.getAge()==0)
return;
System.out.println("年龄:"+d.getAge()); Dog d1=new Dog(-3);
if(d1.getAge()==0)
return;
System.out.println("年龄"+d1.getAge());
}
} //运行结果
年龄:3
输入错误

 包

作用:

1.提供多层命名空间,解决命名冲突,通过使用package,使处于不同package的类可以存在相同的名字(因为处在不同的文件夹下)。

2.对类按功能分类,使项目的组织更加清晰。当开发一个有非常多的类的项目时,如果不使用package对类进行分类,而是把所有类都放在一个package下,这样的代码不仅可读性差,而且可维护性也不好,会严重影响开发效率。

定义包:

语法:package 包名;

(1)必须放在Java源文件中的第一行

(2)一个Java源文件中只能有一个package语句

(3)包名全部英文小写

(4)命名方式:域名倒序+模块+功能

导入包:

语法:import  包名.类名

例:

导入util包中全部类:

import java.util.*;

导入包中指定类:

import java.util.Scanner;

常用系统包:

java.lang   包含java语言基础的类 (此包不需要显式地导入)

java.util     包含java语言中各种工具类

java.io       包含输入、输出相关功能的类