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 { String name;// 姓名 int age;// 年龄 //有参构造 public Person(String name, int age) { this.name = name; this.age = age; }
}
class Person { String name;// 姓名 int age;// 年龄
//无参构造 public 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 { String name;// 姓名 int age;// 年龄 // 有参构造
public Person(String name, int age) { super(); this.name = name; this.age = 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) { new Person("张三", 18).tell(); ; } }
姓名:张三、年龄18通过对以上程序的观察,此时依然通过了对象进行类中tell()方法的调用,但是由于此对象没有任何的引用名称,所以该对象使用一次之后就将称为垃圾,而所有的垃圾将被GC进行回收与释放。
