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没多久的菜鸟,希望有错大家可以点出。
JAVA_SE基础——32.this关键字调用本类的构造方法的更多相关文章
- JAVA_SE基础——6.标识符&关键字
学会写helloworld之后, 我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...
- JAVA_SE基础——40.super关键字
只要this关键字掌握了,super关键字不在话下,因为他们原理都差不多的.. this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针 ...
- JAVA_SE基础——31.this关键字
黑马程序员入学blog... 也算是学习笔记体会. this的通俗解释: 有一个A类,一个B方法,一个C变量,其中B和C都在类A中 this.B()就是调用A类中的B方法 this.C=1(假设C是一 ...
- extends 类的继承 / super关键字,调用继承类里面的函数和变量
Son 继承Father 当其他脚本想调用 Father类里面的变量 or 方法 可以把 Son r=new Son() 等价于 Father r=new Father() 注意: 函数只能单继承 ...
- java使用this关键字调用本类重载构造器
在构造器中可以调用本类的其他重载构造器,不能使用构造器名称来调用另一个构造器,而是应该使用Java特定的this(-.)来调用. this(-.)方法必须出现在构造器中的第一行,用来调用其他重载构造器 ...
- 23.OGNL与ValueStack(VS)-调用普通类的构造方法
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 建立一个新的类:Student,在此省略代码. 然后在loginSuc.js ...
- java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...
类 Class 每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...
- JAVA_SE基础——41.instanceof关键字(运算符)
instanceof 关键字 instanceof关键字的作用:判断一个对象是否属于指定的类别. instanceof关键字的使用前提:判断的对象与指定的类别必须要存在继承或者实现的关系.关于实现以后 ...
- JAVA_SE基础——57.有了包之后类与类之间的访问使用import语句
代码1访问代码2 代码1: class Demo3 { public static void main(String[] args) { Demo4 a = new Demo4(); a.print( ...
随机推荐
- 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)
开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...
- 分享一下我进入IT行业的经历
今天突然根想写博客,就注册了一个,分享一下我的成长经历. 我第一次接触编程的时候是在上大学的时候,我学的专业是工程测量接触的第一个语言是vb,我记得很清楚,我当时写出第一个小Demo是的心情,感觉到了 ...
- 关于CoordinatorLayout的用法——复杂交互的克星
好久没有写博客了,主要还是任务过多哈.在开发的过程当中,也记录了很多东西,但是技术这个事吧,其实,时效性真的事非常强--就比如说,你昨天还津津乐道的一个难点解决方案,你过个几天再回过头去看它,就会有一 ...
- windows下的react-native 开发环境搭建
本教程用安卓手机作为演示. 首先安装jdk.本教程基于jdk1.8,安装时有一点要特别注意:jdk和jre必须装到不同目录下,否则初始化react-native项目时大概率报tools.jar not ...
- python集合深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- delphi 数组复制利用CopyMemory 最为完美
在各网站的文章里面,见复制数据的方法中,有move的,有system.copy的,而要实际应用中,这两种方法,并不是很完美,会遇到一些问题,比如copy在记录里面的复制时,编译都过不去,而CopyMe ...
- [Luogu 2642] 双子序列最大和
Description 给定一个长度为n的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出最大和.一个连续子序列的和为该子序列中所有数之和.每个连续子序列的最小 ...
- Webpack的加载器
一.什么是加载器(loaders)loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用load ...
- Java几种建立实例的方法
1.new something obj=new something(); 2.clone 根据现有的对象实例来建立里一个新对象实例. 只限于实现了java.lang.Cloneable接口的类.否 ...
- selenium +python+windows 环境搭建
很久不弄selenium了,好怀念,现在搭建下环境 1,先安装pip ,因为装的是python3,所以只要你不是在渣渣网站下载到坏的版本,在scripts目录下都有pip.exe文件 直接在环境变量里 ...