8、成员属性封装
封装:对数据进行保护
private关键字对外不可见
使用setter、getter设置或获取属性
类中的所有属性都必须使用private封装,需要提供setter、getter方法
class Person { // 私有化属性 private String name; // 对外提供geter, setter方法 public void setName(String n){ name = n; } public String getName(){ return name; } public static void main(String[] args) { Person person = new Person(); person.setName("张三"); System.out.println(person.getName()); // 张三 } }
9、构造方法与匿名对象
现有程序使用类,经过了2个步骤:
1、声明实例化对象,只能使用默认值
2、通过 setter 方法设置属性
构造方法: 实例化对象时进行数据初始化
1、构造方法名与类名必须一致
2、构造方法无返回值
3、构造方法在new实例化对象时自动调用
class Person { // 私有化属性 private String name; // 有参构造方法 public Person(String n){ name = n; } public static void main(String[] args) { Person person = new Person("张三"); System.out.println(person.getName()); // 张三 } }
(1)Person 定义对象所属类型,类型决定可以调用的方法
(2)person 实例化对象的名称
(3)new 开辟新的堆内存空间
(4)Person(“张三”) 调用构造函数(有参,无参)
所有的类都会提供有无参构造方法,程序编译时自动创建,如果明确构造方法则不自动创建
结论:一个类至少存在一个构造方法
问题:构造方法没有返回值?不使用void
构造方法与普通方法区别:
构造方法在类对象实例化时调用
普通方法在类对象实例化之后调用
构造方法重载
只用考虑方法签名(参数个数,类型,顺序)
按照参数数量顺序排列构造方法
class Person { // 私有化属性 private String name; // 无参构造方法 public Person(){ } // 有参构造方法 public Person(String n){ name = n; } public String getName(){ return name; } public static void main(String[] args) { Person person = new Person("张三"); System.out.println(person.getName()); // 张三 } }
匿名对象
new Person("张三").getName()); // 张三
使用一次后就会被GC回收释放
方法可以传递基本数据类型和引用数据类型
10、this调用本类属性
三类描述
1、当前类中的属性 this.属性
2、当前类中的方法(构造方法:this()、普通方法:this.方法())
3、描述当前对象
访问本类中的属性一定要加this
public Person(String name, int age){ this.name = name ; this.age = age ; }
11、this调用本类方法
1、调用普通方法
setName(name) ; // 或者 this.setName(name) ;
好的代码:
代码结构可以重用
没有重复代码
2、调用构造方法
this()
必须在实例化新对象的时候调用
只允许放在构造函数首行
相互调用必须有出口
// 无参构造方法 public Person(){ this("张三"); } // 有参构造方法 public Person(String name){ this.name = name; }
构造方法调用实现默认参数
class Person { // 私有化属性 private String name; private int age; // 无参构造方法 public Person(){ this("张三"); } // 一参构造方法 public Person(String name){ this(name, 21); } // 两参构造方法 public Person(String name, int age){ this.name = name; this.age = age ; } public void getInfo(){ System.out.println("name: " + this.name + " age: " + this.age); } public static void main(String[] args) { new Person().getInfo(); new Person("李四").getInfo(); new Person("王五", 22).getInfo(); /* name: 张三 age: 21 name: 李四 age: 21 name: 王五 age: 22 */ } }
12、综合实战:简单Java类
简单Java类:
可以描述某一类信息的程序类,没有特别复杂的操作,只作为一种信息存储的媒介
核心结构
1、类名有意义,明确描述某一类事物
2、属性必须使用private封装,提供setter、getter
3、可以提供多个构造方法,必须保留无参构造方法
4、不允许有任何输出,内有获取必须返回
非必须:
1、可以提供获取对象详细信息方法,getInfo()
涉及概念
数据类型、类的定义、private封装、方法定义、对象实例化
class Person { // 私有化属性 private String name; private int age; // 无参构造方法 public Person(){ this("张三", 23); } // 两参构造方法 public Person(String name, int age){ this.name = name; this.age = age ; } // setter getter public void setName(String name){ this.name = name; } public String getName(){ return this.name ; } public void setAge(int age){ this.age = age; } public int getAge(){ return this.age ; } public String getInfo(){ return "name: " + this.name + " age: " + this.age; } public static void main(String[] args) { System.out.println(new Person("王五", 22).getInfo()); // name: 王五 age: 22 } }