封装
封装是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装就是将对象的属性和实现方式隐藏 只提供对外的公共的访问方式
好处:
(1)提高代码的复用性,
(2)提高代码的安全性,
(3)封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。
(4)降低软件的开发复杂度
(5)避免命名冲突
(6)良好的封装能够减少耦合。
(7)类内部的结构可以自由修改。
(8)可以对成员进行更精确的控制。
(9)隐藏信息,实现细节。
封装原则
1. 将不需要对外提供的内容都隐藏起来;
2. 把属性都隐藏,提供公共方法对其访问。
封装的优点
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。
对象本身的属性创建的时候是私有的,外界无法访问,所以就要添加一个外界调用的公共方法(set( )设置属性的方法,get( )获取属性的方法)
如果该对象不需要外界调用就不用添加set()或者get()的方法,不过以后的情况谁也不知道,所以能够保留的还是要保留,
除非你确定这个方法以后都不会调用,可以不写;
构造函数
构造函数主要是在创建对象时,给对象赋值的;他是和new关键字 在一起使用的。他在一个类中可以存在多个;
特点:
(1)他的方法名和类名相同,没有返回值;
(2)在创建一个类的时候,如果你没有创建构造函数时,他会默认你存在一个无参的构造函数。如果你添加了一个有参的构造函数没有写无参的构造函数,
在你创建对象时,你就要写入参数,如果你需要创建无参的对象,你就要自己写一个无参的构造函数,因为你写了一个有参的,他就不会给你默认有无参
的函数了,所以你需要手动添加一个无参的构造函数。
(3)构造函数不能创建私有的,因为你创建一个私有的构造函数,而构造函数是在你创建对象时调用的,如果他是私有的,那他永远也不会调用。
(4)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
类的终结函数
finalize 方法:
如果在类的层次结构中的类定义了 finalize 方法,子类finalize 方法的最后一个动作应该是 调用超类的 finalize 方法,以保证当垃圾回收器回收对象占据的内容时,对象的所有部分都能正常终止。
this
当成员变量和 局部变量同名的时候,为了区分,可以使用一个关键字来完成。
this:代表的是一个对象;代表那个对象呢?那个对象调用this所在的函数,this就代表那个对象。
this就是当前对象的一个引用。
表现形式1 :当局部变量和成员变量同名时,可以用this 来区分。
表现形式2 :构造函数之间的调用可以使用this关键字,后面跟上小括号,指定具体的实参即可明确要调用的构造函数。
注意:调用本类中构造函数的this语句必须定义在构造函数的第一行。 因为初始化动作要先完成。
实例
设置对象的set和get方法 set用于外界设置该属性的值或者改变他的值 get用于外界获取该属性的值
public class Student{
private String name;
private int age;
/**无参的构造函数*/
public Student ( ){
}
/**有参的构造函数*/
public Student(String name,int age){
this.name=name; //属性名相同的时候用this
this.age=age;
}
/**获取name的值*/
public String getName() {
return name;
}
/**设置name的值*/
public void setName(String name) {
this.name = name;
}
/**获取age的值*/
public int getAge() {
return age;
}
/**设置age的值*/
public void setAge(int age) {
this.age = age;
}
/**main方法*/
public static void main(String[] args) {
this.test(); //用this调用方法,这个方法必须要写在第1行
}
public void test( ){
}
}