封装性:
属性可以直接被类外部的对象掉用,这样的操作是不安全的。将内部的属性保护起来,不让外部调用,Java提供一个Private关键字。利用此关键字可实现封装。
class Person{
private String name; //此变量只能被Person类使用,外部类无法调用
private int age;
public void tell(){
System.out.println();
}
}
需使用setter、getter取得封装性内容。
以private String name;封装属性为例:
设置数据:public void setName(String n);
取得数据:public void getName();
class Person{
private String name; //此变量只能被Person类使用,外部类无法调用
private int age;
public void tell(){
System.out.println();
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
开发原则:只要类中的属性使用了private封装,必须严格按照要求编写setter与getter方法。
class Person{ private String name; //此变量只能被Person类使用,外部类无法调用 private int age; public void tell(){ System.out.println(name + age); } public void setName(String n){ name = n ; } public void setAge(int a){ if(a >= 0 && a <= 250){ age = a ; //a满足条件才会赋值 } } public String getName(){ return name; } public int getAge(){ return age; } } public class TestDemo{ public static void main(String args[]){ Person per = new Person(); per.setName("哪吒"); per.setAge(-30); per.tell(); } }
构造方法与匿名对象
实例化对象: 类名称 对象名称 = new 类名称();
每部分意义:
类名称:用于标记对象的类型,因为对象开辟空间后需要开辟堆内存,堆内存保存属性,属性在类中定义;
对象名称:想操作类中的属性或方法,必须依靠对象名称完成。
new:开辟新的堆内存空间,一定使用new完成。
类名称():只要出现“()”的都表示方法。这个实际上就是构造方法
构造方法的定义要求:
要求方法名称与类名称相同,并且没有返回值类型声明。
class Person{ private String name; private int age; public Person(String n, int a){ //方法名称与类名称相同即为构造方法 setName(n); steAge(a); } public void tell(){ System.out.println(name + age); } public void setName(String n){ name = n ; } public void setAge(int a){ if(a >= 0 && a <= 250){ age = a ; //a满足条件才会赋值 } } public String getName(){ return name; } public int getAge(){ return age; } } public class TestDemo{ public static void main(String args[]){ Person per = new Person("哪吒", -30); //实例化时就传值 per.tell(); } }
实例化Person类对象时自动将name与age参数传递,可省略一系列的setter调用。
疑问:构造方法没返回值,为什么不用void声明?
构造方法是在实例化对象的时候只调用一次,而所有的普通方法可调用多次。 如果定义为public void Person(){}.这就是普通方法的。
匿名对象:
指没有名字的对象。对象的名字保存在栈内存。
有名对象: Person per = new Person("ZZZ", -30);
匿名对象:new Person("ZZZ", -30).tell(); 对象没有名字,使用了一次自动成为垃圾。
不用纠结是否使用有名还是无名。
开辟新的内存空间出了使用new之外还要调用构造方法;
构造方法定义要求:
方法名称与类名称相同,无返回值声明;
构造方法允许重载;
如果一个类没声明构造方法,在编译时会自动创建一个无参的什么都不做的构造方法,所以至少会保留一个构造方法。
匿名对象本质就是没有栈内存只使用堆内存空间。用一次成为垃圾。