zoukankan      html  css  js  c++  java
  • JAVA_SE基础——32.this关键字调用本类的构造方法

    学习笔记。

    下面我们来看段代码:

    package day07;
    	class Student{
    
    		int id;  //身份证
    
    		String name;  //名字
    
    		public Student(int id,String name){  
    			this.id = id;
    			this.name = name;
    		}
    				
    		public Student(){
    			System.out.println("无参的构造方法被调用了...");
    		}
    
    		public Student(String name){
    			this.name = name;
    		}
    
    	}
    
    class Demo6 {
    	public static void main(String[] args) {
    			Student s = new Student(458125899,"小明");
    			System.out.println("编号:"+ s.id +" 名字:" + s.name);
    		
    		}
    }
    运行结果:

    编号: 458125899 名字: 小明

     

    认为这样写的同学完全没有错。

     

    P.S.

    软件的可复用性在我们脑海中,最原始的做法当然是一段功能代码的复制,但作为开发人员应该嗅觉到代码中的坏味,这种复制可能导致到同一功能段代码散落四周,可维护性大打折扣。

       面向对象语言拥有4方面的特性:抽象,继承,封装,多态。它为我们提供更高层次的复用,这几年业务系统的开发设计中似乎对这4个特性未能运用好。

       我们来看看用于提高软件设计的可维护性、可复用性的设计原则:
       (1)开-闭原则(Open-Closed Principle OCP)
       (2)里氏替换原则(Liskov Substitution Principle LSP)
       (3)依赖倒转原则(Dependency Inversion Principle DIP)
       (4)接口隔离原则(Interface Segregation Principle ISP)
       (5)组合/聚合复用原则(Composition/Aggregation Principle CARP)
       (6)迪米特法则(Law of Demeter LoD)

       这六个设计原则往往都和面向对象语言的特性有关系,例如:JAVA语言提供的接口,抽象类就我个人而言,起码为OCP,LSP,ISP提供了比较容易的实现方法;

    上面的代码中 有句重复的代码   可以思考下用this关键字来解决以上代码缺少复用性的特点吗?

     

    注意下:

    this关键字调用其他的构造函数要注意的事项:
    1. this关键字调用其他的构造函数时,this关键字必须要位于构造函数中 的第一个语句。
    2. this关键字在构造函数中不能出现相互调用 的情况,因为是一个死循环。

     

    请看修改后的代码:

    class Student{
    
    	int id;  //身份证
    
    	String name;  //名字
    
    	//目前情况:存在同名 的成员 变量与局部变量,在方法内部默认是使用局部变量的。
    	public Student(int id,String name){  //一个函数的形式参数也是属于局部变量。
    		this(name); //调用了本类的一个参数的构造方法
    		//this(); //调用了本类无参的 构造方法。
    		this.id = id; // this.id = id 局部变量的id给成员变量的id赋值
    		System.out.println("两个参数的构造方法被调用了...");
    	}
    	
    	
    	public Student(){
    		System.out.println("无参的构造方法被调用了...");
    	}
    
    	public Student(String name){
    		this.name = name;
    		System.out.println("一个参数的构造方法被调用了...");
    	}
    
    }
    
    
    class Demo6 
    {
    	public static void main(String[] args) 
    	{
    		Student s = new Student(458125899,"小明");
    		System.out.println("编号:"+ s.id +" 名字:" + s.name);
    
    	}
    }

    运行结果: 一个参数的构造方法被调用了...
    两个参数的构造方法被调用了...
    编号:458125899 名字:小明

     

     

    这样改的话 就增加了代码的复用性了。  重复的代码重复的功能显得没意义。

    不懂的请认真看注释,或者留言

     

     

    我不是什么专家,只是一个刚学JAVA没多久的菜鸟,希望有错大家可以点出。

     


     


  • 相关阅读:
    day 26 python2和python3的区别 模块logging 的高级版,collections 模块,random模块
    常用模块:time,os,sys,rondom
    模块 hashlib(算法) configparser(配置) logging(日志)
    序列化,json pickle,shelve
    面向对象的封装,多态,单例模式
    属性,类方法,静态方法,反射
    面向对象的接口类 以及鸭子类型
    面向对象的继承
    面向对象的介绍
    reset internet explorer settings with registry
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465311.html
Copyright © 2011-2022 走看看