zoukankan      html  css  js  c++  java
  • Java面向对象编程 -3.2

    使用this调用本类方法
    除了调用属性之外,this也可以实现方法的调用,但是对于方法的调用就必须考虑构造与普通方法

    • 构造方法调用(this()):使用关键字new实例化对象的时候才会调用构造方法;
    • 普通方法调用(this.方法名称()):实例化对象产生后就可以调用普通方法。

    普通的方法调用:

    package study;
    
    class Person{
    	private int age;
    	private String name;
    	
    	public Person(int age ,String name) {
    		//this.age = age;
    		//this.name = name;
    		this.setAge(age);
    		this.setName(name);//加this与不加 都表示本类方法
    	}
    	public  void intorduce() {
    		System.out.println("age= "+this.age+" name= "+this.name);
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return this.age;
    	}
    	public String getName() {
    		return this.name;
    	}
    	
    }
    public class xxx {
    	public static void main(String[] args) {
    		 new Person(13,"sss").intorduce();
    	}
    
    }
    
    
    

    构造方法的调用
    对于构造方法的调用,肯定是要放在构造函数中执行,现在假设类中一共定义有三个构造方法,但是要求不管调用哪个构造方法,都执行一行输出语句

    传统实现:

    package study;
    
    class Person{
    	private int age;
    	private String name;
    	
    	public Person() {
    		System.out.println("一个新的Person类对象实例化。");
    	}
    	public Person(int age){
    		System.out.println("一个新的Person类对象实例化。");
    		this.age = age;
    	}
    	public Person(int age ,String name) {
    		System.out.println("一个新的Person类对象实例化。");
    		this.age = age;
    		this.name = name;
    	}
    	public  void intorduce() {
    		System.out.println("age= "+this.age+" name= "+this.name);
    	}
    	
    	
    }
    public class xxx {
    	public static void main(String[] args) {
    		 new Person(13,"sss").intorduce();
    	}
    
    }
    
    >>>一个新的Person类对象实例化。
    >>>age= 13 name= sss
    

    如果要想评价一个代码的好坏:

    • 代码结构可以重用,提供的是一个中间独立的支持;
    • 我们的目标:没有重复

    利用this()构造调用优化

    class Person{
    	private int age;
    	private String name;
    	
    	public Person() {
    		System.out.println("一个新的Person类对象实例化。");
    	}
    	public Person(int age){
    		this();//调用无参构造方法
    		this.age = age;
    	}
    	public Person(int age ,String name) {
    		this();//调用单参构造方法
    		this.name = name;
    	}
    	public  void intorduce() {
    		System.out.println("age= "+this.age+" name= "+this.name);
    	}
    	
    	
    }
    public class xxx {
    	public static void main(String[] args) {
    		 new Person(13,"sss").intorduce();
    	}
    
    }
    >>>一个新的Person类对象实例化。
    >>>age= 0 name= sss
    
    

    对于本类构造方法的互相调用需要注意以下几点重要问题:

    • 构造方法必须在实例化新对象的时候调用,所以“this()”的语句只允许放在构造方法的首行;
    • 构造方法互相调用时请保留有程序的出口,别形成死循环;

    四参、三参 两参 无参构造函数

    
    public class Emp {
    	private long empo;//员工编号
    	private String ename;//员工名字
    	private String dept;//部门名称
    	private Double salary;//基本工资
    	
    	public Emp() {
    		this.empo =1000l;
    		this.ename = "无名氏";
    	}
    	public Emp(long empo) {
    		this.empo = empo;
    		this.ename = "新员工";
    		this.dept = "未定";
    		this.salary = 0.0d;
    	}
    	public Emp(long empo,String ename,String dept){
    		this.empo = empo;
    		this.ename = ename;
    		this.dept = dept;
    		salary = 2500.0d;
    	}
    	public Emp(long empo,String ename,String dept,double salary) {
    		this.empo = empo;
    		this.ename =ename;
    		this.dept = dept;
    		this.salary = salary;
    	}
    	public String tell() {
    		return "empo:"+this.empo+" ename:"+this.ename+" dept:"+this.dept+" salary:"+this.salary;
    	}
    	public static void main(String[] args) {
    		Emp emp = new Emp(130l);
    		System.out.println(emp.tell());
    	}
    }
    
    
    

    优化 得带赋值 四参构造足以撑起所有赋值

    
    public class Emp {
    	private long empo;//员工编号
    	private String ename;//员工名字
    	private String dept;//部门名称
    	private Double salary;//基本工资
    	
    	public Emp() {
    		this(1000l,"无名氏",null,0.0d);
    //		this.empo =1000l;
    //		this.ename = "无名氏";
    	}
    	public Emp(long empo) {
    		this(empo,"新员工","未定",0.0d);
    //		this.empo = empo;
    //		this.ename = "新员工";
    //		this.dept = "未定";
    //		this.salary = 0.0d;
    	}
    	public Emp(long empo,String ename,String dept){
    		this(empo,ename,dept,2500.0d);
    //		this.empo = empo;
    //		this.ename = ename;
    //		this.dept = dept;
    //		salary = 2500.0d;
    	}
    	public Emp(long empo,String ename,String dept,double salary) {
    		this.empo = empo;
    		this.ename =ename;
    		this.dept = dept;
    		this.salary = salary;
    	}
    	public String tell() {
    		return "empo:"+this.empo+" ename:"+this.ename+" dept:"+this.dept+" salary:"+this.salary;
    	}
    	public static void main(String[] args) {
    		Emp emp = new Emp(130l);
    		System.out.println(emp.tell());
    	}
    }
    
    
    
  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/sakura579/p/12324139.html
Copyright © 2011-2022 走看看