文章目录
1 成员属性封装
在类之中的组成就是属性与方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而属性需要采用封装性对属性进行保护。
在默认情况下,对于类中的属性是可以通过利用类的实例化对象来进行调用的。封装之后,对内不可见,对外部不可见。Java开发标准要求:
(1)setter、getter方法,使用setXxx(),getXxx();
类中的属性都必须使用private封装并提供getter、setter方法。
class Person{ //类的定义,此时默认为default
private String name; //类的属性,此时使用private封装,
//类的外部无法访问,必须提供getter、setter方法
private int age; //类的属性
/*定义无参构造方法,在项目中,建议无论怎样都要有无参构造,
PS:后面文章有原因。
*/
public Person(){}
/*定义类的双参构造方法,这里构造方法中形参标识符为n和a,这里不建议这么做,
在后面学习了this关键字我们会使用一种更项目化的方式定义,构造方法不知道可以
先记住,后面还有说明。
*/
public Person(String n, int a){
name = n;
age = a;
}
/*定义类的属性name的getter方法*/
public String getName(){
return name;
}
/*定义类的属性age的getter方法*/
public String getAge(){
return age;
}
/*定义类的属性name的setter方法*/
public void setName(String n){
name = n;
}
/*定义类的属性age的setter方法*/
public void setAge(String a){
age = a;
}
}
public class JavaDemo{
public static void main(String[] args){
Person perA; //声明Person类对象perA,默认值为null
perA = new Person("hhy", 16); //实例化Person类对象perA,这时才可以使用Person的对象perA
Person perB = new Person("lks", 18);//声明并实例化Person类对象perB
System.out.println(perA.getName());//调用对象的方法
}
}
2 构造方法与匿名对象
现在的程序在使用类的时候一般都按照了如下的步骤进行:
(1)声明并实例化对象,这个时候实例化对象中的属性并没有任何的数据存在,都是其对应数据类型的默认值。
(2)需要通过一系列的setter方法为类中的属性设置内容。两个步骤:对象准备、对象的使用。
构造方法,即可以通过构造方法实现实例化对象中的属性初始化处理。只有在关键字new的时候使用构造方法。构造方法的定义要求:
(1)构造方法名称与类名称保持一致;
(2)构造方法不允许设置任何的返回值类型,即,没有返回值定义;
(3)构造方法是在使用关键字new实例化对象的时候自动调用的。
构造方法对象实例化格式和传统的对象实例化格式的比较:
(1)传统的对象实例化格式:Person per = new Person();
(2)构造方法的对象实例化:Person per = new Person(“vic”, 18);
此里面的Person主要时定义对象的所属类型,类型决定了对象可以调用的方法;per是实例化对象的名称,所有的操作通过对象来进行访问;new指开辟一块新的堆内存空间;Person(“vic”, 18)调用有参构造;Person()调用无参构造。
在Java程序中考虑到程序结构的完整性,默认提供一个无参的构造方法,在程序编译时自动创建。如果你已经定义了一个构造方法,默认构造方法不再创建。
为什么构造方法不允许设置返回值类型?
分析:程序编辑器是根据代码结构来进行编译处理的,执行的时候也是根据代码结构来处理的。如果构造方法上使用了void,那么此结构就和普通方法的结构完全相同,这样编译器就会认为此方法是一个普通方法,普通方法与构造方法最大的区别在于构造方法是在类对象实例化的时候调用的,而普通方法是在类对象实例化产生之后调用的。
如果只通过实例化对象来进行类的操作,这种形式称为匿名对象。只要是方法都可以传递任意的数据类型(基本数据类型、引用数据类型)。
class Person{ //类的定义,此时默认为default
private String name; //类的属性,此时使用private封装,
//类的外部无法访问,必须提供getter、setter方法
private int age; //类的属性
/*定义无参构造方法,在项目中,建议无论怎样都要有无参构造,
PS:后面文章有原因。
*/
public Person(){}
/*定义类的双参构造方法,这里构造方法中形参标识符为n和a,这里不建议这么做,
在后面学习了this关键字我们会使用一种更项目化的方式定义,构造方法不知道可以
先记住,后面还有说明。
*/
public Person(String n, int a){
name = n;
age = a;
}
/*定义类的属性name的getter方法*/
public String getName(){
return name;
}
/*定义类的属性age的getter方法*/
public String getAge(){
return age;
}
/*定义类的属性name的setter方法*/
public void setName(String n){
name = n;
}
/*定义类的属性age的setter方法*/
public void setAge(String a){
age = a;
}
}
public class JavaDemo{
public static void main(String[] args){
Person per = new Person("lks", 18); //使用双构造方法实例化对象
//使用匿名对象调用getName方法
System.out.println(new Person("hhy", 16).getName());
}
}