this调用本类属性
- 当前类中的属性:this.属性
- 当前类中的方法(普通方法、构造方法):this()、this.方法名称();
- 描述当前对象;
属性:
如果不加this,由于按照就近取用原则,程序默认取用本{}内的同名参数。所以访问本类中属性的时候,要在属性变量前加this实现访问。
this调用本类方法
方法:
- 构造方法调用【this()】:使用关键字new实例化对象的时候才会调用构造方法。要放在构造方法中执行
- 普通方法调用【this.方法名称()】:实例化对象产生之后就可以调用普通方法。
普通方法调用的构造方法中:
this.setName(name);
this.setAge(age);
构造方法调用:
public Person() {
System.out.println("***一个新的Person类对象实例化了。***" );//不论调用重载构造方法中的哪个,只要相应的构造方法里面写了本构造方法,则本构造方法中的输出就被执行。
}
public Person(String name){
this(); //调用本类无参构造
this.name = name ;
}
public Person (String name,int age){ //定义有参构造
this(name); //调用单参构造
this.age = age ;
}
上面构造方法的调用实现了重用,而且消除了重复。需要注意的问题:
- 构造方法必须在实例化新对象的时候调用,所以”this()“的语句只允许放在构造方法的首行; 构造方法中可以调用普通方法,但是在普通方法中是没可能调用构造方法的。
- 构造方法互相调用时要保留有程序的出口:不能出现构造器的递归调用。
构造方法之间互相调用从而减少重复代码:
public Person (String name,int age){ //定义有参构造
this(name); //调用单参构造
this.age = age ;
this.num = "未定的默认值" ;
↓↓↓
public Person (String name,int age){ //定义有参构造
this(name,age,"未定的默认值");}
编写代码的时候一定要先考虑消除重复。
综合案例:简单java类
简单java类:可以描述某一类信息的程序类。【描述一个人、描述一本书、一个部门、一个雇员】并且在此类中没有特别复杂的逻辑操作。只是一个信息存储的媒介。核心开发结构如下:
- 类名称一定要有意义,可以明确的描述一类事物;
- 类中的所有属性都必须使用private进行封装,同时封装后的属性必须要提供有setter、getter;
- 类之中可以提供有无数多个构造方法,但是必须要保留有无参构造方法。;
- 类中不允许出现任何的输出语句,所有内容的获取必须返回
- 【非必须】可以提供有一个获取对象详细信息的方法,暂时将此方法名称定义为getInfo();
范例:
class Dept {//类名称可以明确描述出某类事物
private long deptno ;
private String dname ;
private String loc ;
//类中的所有属性都必须使用private进行封装,并设置setter和getter方法
public String getInfo(){//获取对象详细信息的方法
return "【部门信息】部门编号:" + this.deptno+
"、部门名称:"+ this.dname+
"、部门位置:"+this.loc ;
//勒种不允许出现任何输出语句
}
public void setDeotno(long depto){
this.deptno = deptno ;
}
public void setDname(String dname){
this.dname = dname ;
}
public void setLoc(String loc){
this.loc = loc ;
}
public long getDeptno(){
return this.deptno ;
}
public String getDname(){
return this.dname ;
}
public String getLoc(){
return this.loc ;
}
public Dept(){}//必须提供有无参
public Dept(long deptno,String dname,String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc ;
}
}
public class jiandanjavaclass {
public static void main(String[] args){
Dept dept = new Dept(10,"技术部","北京") ;
System.out.println(dept.getInfo());
}
}