一、构造函数
构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。如下:
public class Test01 { private String name; //有参构造函数 public Test01(String name) { this.name = name; } public static void main(String[] args) { Test01 t=new Test01("Wade"); System.out.println(t.name); } }
运行结果是“Wade”
插一句,插入构造函数快捷键:alt+insert,Constructor(构造函数)
这就说明在我们创建Test01对象时,会自动调用构造函数完成初始化,这时程序中的name属性就成了Wade。上面说到构造函数是为了在new对象传入参数后完成属性的初始化。但是 ,为什么我程序中不写构造函数依然可以完成初始化。
1.如果不写构造函数,程序会自动生成一个无参数无操作的构造函数(默认的,隐藏)。
2.如果写了构造函数,则自定义构造函数会覆盖无参数构造函数。
3.如果只写了有参数的构造函数,且不存在无参数的构造函数,将不能以 new XXX(); 这样的方式实例化对象,在实例化对象代码中,new XXX(“***”); 括号中的参数必须与构造函数的参数保持一致,否则报错。(当然你也可以生成对象后通过他们的set、get方法进行赋值。)
所以,比较稳妥也是较常用的方式是在java类中同时定义无参构造函数和有参构造函数,代码如下:
public class Test01 { private String name; //有参构造函数 public Test01(String name) { this.name = name; } //无参构造函数 public Test01() { } public static v<strong>本文来源gaodaima#com搞(代@码$网6</strong>oid main(String[] args) { //既可以调用有参构造函数实例化对象 Test01 t=new Test01("Wade"); //又可以调用有参构造函数实例化对象 Test01 t1=new Test01(); System.out.println(t.name+","+t1.name); } }
运行结果是“Wade,null”
这样在实际使用中会非常方便的。
二、set()/get()方法
我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的。
然后我们来了解一下JAVA面向对象编程中的封闭性和安全性。封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,如此一来其他类则不能对该变量访问。这样我们就将这些变量封闭在了类内部,这样就提高了数据的安全性,当我们想要操作这些域变量怎么办呢?我们可以通过两种方法,第一中即通过public方式的构造器(或称构造函数),对象一实例化就对该变量赋值。第二种就是通过上面提到的set和get方法,这里我举一个特定的例子,我定义一个Person类,该类中有name、age这两个私有域变量,然后我定义setname()、getname()、setage()、getage()这四个方法,通过这四个方法来实现对name和age的操作。这样一来,我不用直接对Person类中的域变量操作,而是通过set和get方法间接地操作这些变量,这样就能提高域变量的安全性,同时又保证了域变量的封装型。
现在以上述代码为例,添加set/get方法
同样使用快捷键:alt+insert,Getter and Setter
public class Test01 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //有参构造函数 public Test01(String name) { this.name = name; } //无参构造函数 public Test01() { } public static void main(String[] args) { //既可以调用有参构造函数实例化对象 Test01 t=new Test01("Wade"); //又可以调用无参构造函数实例化对象 Test01 t1=new Test01(); //使用set()方法给属性赋值 t.setName("CP3"); //传统方式赋值 t1.name="Rose"; //使用get()方法获取属性值 System.out.println("t:"+t.getName()+","+"t1:"+t1.name); //在同一个类中,t.getName()和t.name效果是一样的,但如果不是同一个类,属性是私有的,就只能使用t.getName(),set()方法也是一样的。 } }