学习笔记。

下面我们来看段代码:

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没多久的菜鸟,希望有错大家可以点出。

JAVA_SE基础——32.this关键字调用本类的构造方法的更多相关文章

  1. JAVA_SE基础——6.标识符&关键字

    学会写helloworld之后,  我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...

  2. JAVA_SE基础——40.super关键字

    只要this关键字掌握了,super关键字不在话下,因为他们原理都差不多的.. this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针 ...

  3. JAVA_SE基础——31.this关键字

    黑马程序员入学blog... 也算是学习笔记体会. this的通俗解释: 有一个A类,一个B方法,一个C变量,其中B和C都在类A中 this.B()就是调用A类中的B方法 this.C=1(假设C是一 ...

  4. extends 类的继承 / super关键字,调用继承类里面的函数和变量

    Son 继承Father 当其他脚本想调用 Father类里面的变量 or 方法 可以把 Son r=new Son()   等价于 Father r=new Father() 注意: 函数只能单继承 ...

  5. java使用this关键字调用本类重载构造器

    在构造器中可以调用本类的其他重载构造器,不能使用构造器名称来调用另一个构造器,而是应该使用Java特定的this(-.)来调用. this(-.)方法必须出现在构造器中的第一行,用来调用其他重载构造器 ...

  6. 23.OGNL与ValueStack(VS)-调用普通类的构造方法

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 建立一个新的类:Student,在此省略代码. 然后在loginSuc.js ...

  7. java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...

    类 Class  每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...

  8. JAVA_SE基础——41.instanceof关键字(运算符)

    instanceof 关键字 instanceof关键字的作用:判断一个对象是否属于指定的类别. instanceof关键字的使用前提:判断的对象与指定的类别必须要存在继承或者实现的关系.关于实现以后 ...

  9. JAVA_SE基础——57.有了包之后类与类之间的访问使用import语句

    代码1访问代码2 代码1: class Demo3 { public static void main(String[] args) { Demo4 a = new Demo4(); a.print( ...

随机推荐

  1. python 想搞加密算法吗?快戳这里

    加密算法介绍 一,HASH Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换 ...

  2. JavaScript中的私有成员[翻译]

    原作者:Douglas Crockford,原文地址:http://www.crockford.com/javascript/private.html JavaScript 是世界上被误解最深的编程语 ...

  3. android使用JSON数据和服务器进行交互

    //点击按钮发送反馈信息给服务端,成功则进入优惠券界面 Button upload = (Button) findViewById(R.id.upload); final String finalLa ...

  4. js常见算法(一)

    1.每个单词手字母大写 var capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase( ...

  5. Activiti就是这么简单

    Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...

  6. 小程序首页onLoad为异步,调用app.js中的全局参数的解决方案。

    一,先说一下遇到的问题: 在首页,为了携带app.js中一些参数去做请求动作,但是由于异步原因,发现请求时候,参数信息还未获取到但请求已经发出去. 若等app.js的全局参数返回来,再携带着它去做请求 ...

  7. Jmeter 相关资源

    官网:http://jmeter.apache.org/ 插件: https://jmeter-plugins.org

  8. js正则《转载收藏》

    \:转义字符.'\\n'匹配\n ^:开始位置.'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88' $:结束位置.'[0-9]$'匹配以数字结尾的字符,可以匹配'ab12 ...

  9. Vue之九数据劫持实现MVVM的数据双向绑定

    vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的. 如果不熟悉defineProperty,猛 ...

  10. 20个JS正则表达式

    1 . 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间. ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2. 校验中文 ...