1、成员属性封装
在类之中的组成就是属性和方法,一般而言,方法都是对外提供服务的,所以一般不会进行封装。而属性需要较高安全性,所以往往需要对其进行保护,此时就是成员属性的封装。
在默认情况下,对于类中的属性是可以通过其它类利用对象进行调用,即类中的属性没有进行封装处理,那么外部的就可以利用对象对属性值进行修改,有可能会设置一些不合法的数据(错误的数据)。
所以,在定义类的时候,为了属性的安全性,我们可以使用关键字:private进行封装。
一旦使用了private关键字对属性进行了封装,那么该属性只对内部可见,对外部是不可见的。若想要让外部访问被封装的属性,则可以在定义类是进行setter()和getter()方法的设置。
范例:标准的封装类
package cn.demos;
class Person {
String name;// 姓名
int age;// 年龄
public void tell() {
System.out.println("姓名:" + name + "、年龄" + 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) {
this.age = age;
}
}
}
public class Demo1 {
public static void main(String[] arge) {
// 声明实例化对象
Person person = new Person();
// 利用set方法赋值
person.setName("张三");
person.setAge(18);
person.tell();
}
}
注意:在以后进行定义类得时候,类中的属性一定要使用private关键字进行封装,被封装后的属性,一定要提供getter()和setter()两个方法以供外部类进行访问。
2、构造方法与匿名对象
构造方法:通过构造方法实现实例化对象中的属性初始化处理。只有在关键词new的时候使用构造方法。
构造方法的定义的要求如下:
1)方法名称与类名称保持一致;
2)构造方法不允许设置任何的返回值类型,即:没有返回值定义
3)构造方法是在使用关键词new实例化对象的时候自动调用的。
范例:定义构造方法
有参构造 | 无参构造(类中自带) |
class Person { } | class Person {
} |
注意:一个类中至少存在一个构造方法。
构造方法与普通方法的区别:无返回值,且只在程序new的时候调用一次。
范例:构造方法重载
class Person {
String name;// 姓名
int age;// 年龄
//有参构造
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//有一个参数
public Person(String name) {
super();
this.name = name;
}
//无参构造
public Person() {
}
}
注意:在定义多个构造参数的重载时,可以按照参数的降序或升序进行书写;构造方法传值与setter方法传值的区别在于,构造方法传值是在对象初始化时,而setter是在初始化之后对属性进行设值也可以修改属性值。
2、匿名对象
对象产生格式:
1)定义对象名称:类名称 对象名称 = null;
2)实例化对象:对象名 = new 类名称();
通过此种方式进行类得操作也可以,二这种形式没有名字就称为匿名对象。
范例:观察匿名对象
代码 | 结果 |
package cn.demos; class Person { public Person(String name, int age) { public void tell() { public String getName() { public void setName(String name) { public int getAge() { public void setAge(int age) { public class Demo1 { | 姓名:张三、年龄18 |
通过对以上程序的观察,此时依然通过了对象进行类中tell()方法的调用,但是由于此对象没有任何的引用名称,所以该对象使用一次之后就将称为垃圾,而所有的垃圾将被GC进行回收与释放。