1 封装性
1.1封装性的产生目的
- 保护某些属性和方法不被外部所看见
如果不同private而用public来修饰属性。如:
class People{
public age;
}
则在外部可以直接在对象实例化后通过people.age = 30
直接修改属性,甚至出现people.age = -30
这样的错误属性。
然而用private修饰类的属性后,外部将不能通过people.age = 30
这样直接修改属性。
1.2封装的实现
- 为属性和方法进行封装是通过关键字private声明的
- 实现该属性的set和get方法,为外部所访问
通过set的方法,来传入属性值。如:
public void setAge(int age) {
//set是设置数据
this.age = age;
}
外部调用方法:people.setAge(30);
通过get的方法,来得到属性值。如:
public int getAge() {
return age;
}
外部调用方法:int age = people.getAge();
然而通过这种方法,外部依然可以通过people.setAge(-30);
来传入-30这个非法的年龄值。
于是就需要在类中的set方法加入判断:
public void setAge(int age) {
//set是设置数据
if (age>=0&&age<150){
this.age = age;
}
}
通过这个方法,来判断输入的值是否为非法值。
2 匿名对象
2.1 匿名对象就是没有名字的对象,如果程序中只是用一次该对象,就可以使用匿名对象的方式
如:
package com.jikexueyuan.classdemo;
class Student{
public void tell(){
System.out.println("hello world");
}
}
public class ClassDemo03 {
public static void main(String[] args){
//Student student = new Student();
//student.tell();
//匿名对象,用于只使用一次。
new Student().tell();
}
}
3 构造方法
3.1格式:(少了一个返回值类型)
访问修饰符 类名称(){
程序语句
}
如:
class Pep{
//构造方法
public Pep(){
System.out.println("hello world");
}
}
public class ClassDemo04 {
public static void main(String[] args){
Pep pep = new Pep();
}
}
在Pep类实例化之后,Pep类中的构造方法会直接被执行。
3.2注意点:
- 构造方法名称必须与类名一致
- 构造方法没有返回值
3.3构造方法主要是为类中的属性初始化
如:
class Pep{
//构造方法
int age;
String name;
public Pep(int a,String n){
age = a;
name = n;
System.out.println("姓名:"+name+"年龄:"+age);
}
}
public class ClassDemo04 {
public static void main(String[] args){
Pep pep = new Pep(30,"张三");
}
}
3.4 每个类在实例化之后都会调用构造方法,如果没有构造方法,程序在编译的时候回创建一个无参的什么都不做的构造方法
3.5 构造方法也可以进行重载
比如上面3.3的代码,在public Pep
的方法下面进行重载创建一个:
public Pep(int a){
age = a;
System.out.println("年龄:"+age);
}
这样,在main方法中,通过Pep pep = new Pep(30,"张三");
或者Pep pep = new Pep(30);
都可以调用构造方法。这就是构造方法的重载。