private封装:
封装是面向对象最复杂的概念,使用private关键字的封装处理只是封装的第一步,要想完全掌握封装需要学习继承和多态
一个没有封装的程序
class Person{
String name;
int age;
public void getPersonInfo(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test{
public static void main(String[] args) {
Person person = new Person();
person.name = "张三" ;
person.age = -200 ;
person.getPersonInfo();
}
}
此时年龄可以随意赋值,要想避免这种问题,必须使对象不能直接操作属性值,使用private封装
private String name;
private int age;
使用private对属性进行封装后,要想访问私有属性必须提供两种方法:
setter方法:用于属性内容的设置与修改
getter方法:用于属性内容的获取
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>0 && age<200){
this.age = age;
}else{
this.age = 0;
}
}
public void getInfo(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person();
per.setName("张三");
per.setAge(23);
per.getInfo();
}
}
由此可以看出,private实现封装最大的特征就是:只允许本类访问,外部类不能访问
为了避免外部类直接操作属性,在编写类时,类的属性必须使用private封装,要想在外部访问,就得定义setter、getter方法
构造方法:(对类中属性进行初始化)
构造方法就是使用关键字new实例化对象时来进行调研的方法,构造方法的定义必须遵循以下原则:
a.方法名称必须与类名称相同
b.构造方法没有返回值类型声明
c.每一个类中一定至少存在一个构造方法(没有明确定义时,系统自动生成一个无参构造,当定义了构造方法后默认的无参构造就不存在)
类的组成:属性、构造方法、普通方法
属性是在对象开辟堆内存时开辟的空间
构造方法是在使用new后调用的
普通方法是在空间开辟了、构造方法调用之后可以多次调用的
public void Person(){}//命名不规范的普通方法
public Person(){}//构造方法
所有为了区分普通方法与构造方法,构造方法统一不加返回值类型声明
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>0 && age<200){
this.age = age;
}else{
this.age = 0;
}
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void getInfo(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("张三",23);
per.getInfo();
}
}
构造方法重载(参数类型或个数不同)
public Person(){
System.out.println("这是一个无参构造方法");
}
public Person(String n){
name = n;
System.out.print("这是一个有参构造方法");
}
进行类定义时顺序:属性 -> 构造方法 -> 普通方法
匿名对象:new Person("张三",23).getInfo();
匿名对象没有任何栈空间所指向,所有使用一次之后就会成为垃圾空间