1、封装性(private)
首先我们来看一个例子:
public class People {
int age;
String name;
}
public class Test {
public static void main(String[] args) {
People people = new People();
people.name = "张三";
people.age = 28;
System.out.println(people.name);
System.out.println(people.age);
people.age = -1000;
System.out.println(people.age);
}
}
测试结果:
张三
28
-1000
人怎么可能有负数的年龄,这样很不合理。其他类随便访问,而且随便修改值,这样很不安全。
为什么要封装?好处是?
封装把复杂的事物变成简单的事物,通过一个操作入口。
封装之后才会形成真正的对象,真正的独立体。
封装意味着可以重复使用,适应性强、安全性高。
封装步骤:
所有属性私有化,使用private关键字就行修饰。(private表示私有,修饰的数据只能在本类中访问)
有private修饰但是我还想在其它类访问怎么办——>使用getter/setter方法(可以会有疑问,既然能通过getter/setter在其它类也能访问,那封装来干嘛。别急看第二大点)
2、getter/setter方法
下面的例子通过private来就行封装,所以其他类通过(引用.变量)的方式访问不了了,必须通过(引用.方法)来访问,而方法里面可以写限制的条件,这样就保证了安全性。
public class People {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
if( age < 0 || age>150){
System.out.println("你赋值的年龄不合法");
}else{
this.age = age;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
People people = new People();
people.setName("张三"); //setter方法用来赋值
people.setAge(28);
System.out.println(people.getName()); //getter方法用来取值
System.out.println(people.getAge());
people.setAge(-1000); //这个条件被限制了,所以没有改变到值
System.out.println(people.getAge()); //输出原来的值
}
}
测试结果:
张三
28
你赋值的年龄不合法
28
建议:setter方法和getter方法采用自动生成。如果不是自动生成,必须按照他的语法规则来写。
3. 构造方法
构造函数(constructor)是与new运算符一起使用在创建对象的语句中 。也就是说,只要你new一个对象出来,就会相应地调用这个类的构造方法。有参数的构造方法可以对对象进行初始化,但建议写了有参的构造方法后再写一个无参的空的构造方法,便于创建一个对象而不给它的成员变量赋初值。
其作用具体有:
用来在创建对象
为对象成员变量赋初始值
!!!要注意,自己写了有参的构造方法,编译器是不会再补充一个无参构造方法的。
上面我们知道setter可以为变量赋值,而构造方法的作用中也有赋值功能。
当有很多变量时就要写很多的setter方法(这样太麻烦了),直接把他们变成构造方法。
代码可以改成:
public class People {
private int age;
private String name;
public int getAge() {
return age;
}
/*
public void setAge(int age) {
if( age < 0 || age>150){
System.out.println("你赋值的年龄不合法");
}else{
this.age = age;
}
}
*/
public String getName() {
return name;
}
/*
public void setName(String name) {
this.name = name;
}
*/
public People(int age, String name) { //默认的构造方法是空的,这里重载了构造方法并带有形参;
if( age < 0 || age>150){
System.out.println("你赋值的年龄不合法");
}else{
this.age = age;
}
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
People people = new People(28,"张三"); //这里通过new调用带有形参的构造方法,创建了对象并赋值
/*
people.setName("张三"); //setter方法用来赋值
people.setAge(28);
*/
System.out.println(people.getName()); //getter方法用来取值
System.out.println(people.getAge());
People people1 = new People(-1000,"张三");
System.out.println(people.getAge());
}
}
测试结果:
张三
28
你赋值的年龄不合法
28
有参数的构造方法主要就是用于对创建出来的对象进行初始化
没有参数的构造方法,又叫缺省构造方法。其实,你的类如果没有定义任何构造方法,Java的编译器会配上一个自动缺省构造方法,这个构造方法是空的,不做任何事情,只是为了满足编译需要。或者,你也可以自己写一个空的构造方法,在里边对一些属性赋值,或者执行一些其他操作!
原文链接:Java之封装性、getter方法setter方法、以及构造函数的作用_柏拉图呀的博客-CSDN博客