Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】
一.构造函数的规则
1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作。
2.构造方法与类名相同且没有返回值(返回值也不能为void型)。如:public 构造方法名( ) { }
3.构造方法和new一起操作,在对象实例化时被系统自动调用,且只运行一次,不能被对象直接调用。
4.当没有自定义构造方法时,系统会自动添加无参的构造方法。
5.当有自定义构造方法,无论是有参、无参的构造方法,系统都不会再自动添加无参的构造方法。
6.构造方法不能被继承,因此,它不能被重写,但是能被重载,可以定义多个不同的参数个数或参数类型的构造方法。
7.当有父类时,子类在实例化对象时,会先执行父类的构造方法,然后执行子类的构造方法。其中,父类的构造方法可以有0个或多个。
(1)如果父类没有写构造方法,子类可以写super();也可以不写(系统会默认调用super();)。
(2)如果父类写了一个无参构造方法和多个有参构造方法,子类会默认调用无参构造方法,如果想调用某个有参构造方法,需在第一行写上super(参数);进行显式调用。
(3)如果父类有有参构造方法,却没有无参构造方法,子类的每一个构造方法都必须在第一行显示地用super(参数);去调用。
(4)如果父类和子类都没有写构造函数,编译器会为父类和子类分别生成一个默认的无参构造函数。默认构造函数的修饰符只跟当前类的修饰符有关(如一个类被定义为public,那么它的构造方法也是public)。
二.this关键字
类的成员属性和方法,是提供了一个模子,设定有哪些东西。用此类实例化一个对象,那么此对象就具备了这些属性和方法。带参构造方法,即把参数值赋值给这个类的成员属性,该对象具有了当前属性值,如果类的成员属性名与带参构造方法的参数名相同,那么由于就近原则,参数值赋值不到成员属性那里。
public class Constructor {
String name;
public Constructor(String name){
this.name=name; //如果这里用name=name;就近原则,参数值赋给了局部变量name,但是成员属性name不会被赋值,对象的属性值为null
}
public static void main(String[] args){
Constructor c=new Constructor("小c");
System.out.println(c.name);
}
}
//结果:小c
this在类中代表当前对象,可通过this 关键字完成当前对象的成员属性、成员方法和构造方法的调用。如:this.name=name; this.method(); this();
this();//表示调用本类中的无参构造方法,可在有参构造方法中被调用,其它情况构造方法间也不能互相调用;构造方法不能在普通方法中被调用,普通方法可以在构造方法中被调用,可以用this.method();也可以method();。
super(); //调用父类的无参构造函数
this();和super();均只能放在构造方法第一行。
例1
public class Test {
String name;
public Test(){
System.out.println("父类的无参构造方法");
}
public Test(String name){
this.name=name;
System.out.println(name+"的有参构造");
}
}
public class ChildTest extends Test {
public static void main(String[] args){
ChildTest c=new ChildTest();
System.out.println(c.name);
}
public ChildTest(){
super("父类");
System.out.println("子类无参构造方法");
}
}
//运行结果:
父类的有参构造
子类无参构造方法
父类
子类继承了父类的属性,对象有其属性值。
例2
public class Test {
public Test(){
System.out.println("construct");
}
public void Test(){
System.out.println("call Test");
}
public static void main(String[] args){
Test t=new Test(); //调用构造函数
t.Test(); //调用Test方法
}
}
//运行结果
construct
call Test
普通方法可以与构造方法同名,但建议不要将类名作为普通方法名。
this小结:
Java中,this用来指向当前实例对象,它区分了对象的成员变量与方法的形参,当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量。(就近原则)
构造方法:
创建对象时,如Animal one=new Animal(); 或者Animal one = new Animal("one",2);
相应的会选择调用无参构造方法或者有参构造方法,构造方法都是用来初始化对象的,有参构造方法的参数作用可以把对象的实参传给形参,形参值赋值给成员属性,使得当前对象拥有赋值后的属性值。成员属性是这个类共同拥有的,该类实例化对象后,把值赋值给成员属性,当前对象即拥有赋值后的属性值。
Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】的更多相关文章
- JavaSE复习日记 : 实例化对象/构造方法和this关键字
/* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...
- java基础(十四)集合(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- java基础(十)面向对象(五)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- Java基础(十四):泛型
一.Java 泛型: Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就 ...
- Java学习笔记十四:如何定义Java中的类以及使用对象的属性
如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- 夯实Java基础(十四)——Java8新的日期处理类
1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...
- Java基础(十四)代理(Proxy)
1.为什么要使用代理 代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 假设有一个表示接口的Class对象(有可能只包含一个接口),它的确 ...
- java基础(十四章)
1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导 ...
随机推荐
- android:layout_weight的真实含义/android:layout_gravity的条件
用layout_weight的时候,不要把宽度(或是高度,你想分配weight的那个)设成match_parent. android:layout_weight只适用于LinearLayout and ...
- Mybatis学习--XML映射配置文件
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configuration.html MyBatis 的配置文件包含了影响 MyBat ...
- 错误名称:Uncaught SyntaxError: Unexpected identifier
控制台输出: 1.谷歌:Uncaught SyntaxError: Unexpected identifier 2.火狐:SyntaxError: missing ] after element li ...
- Java Main Differences between HashMap HashTable and ConcurrentHashMap
转自这篇帖子:http://www.importnew.com/7010.html HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以 ...
- 转载:IntelliJ IDEA 2016.2 配置Tomcat 运行Web项目
以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多 ...
- [bzoj3670] [NOI2014] [lg2375] 动物园
nxt数组为KMP的next数组num[i]储存了i前面可以匹配的串的个数.先在KMP求nxt中顺便求出num最后再找到对于i的最大的前后缀不重叠的可匹配的j,ans*=(num[j]+1)%1000 ...
- ML 徒手系列 最大似然估计
1.最大似然估计数学定义: 假设总体分布为f(x,θ),X1,X2...Xn为总体采样得到的样本.其中X1,X2...Xn独立同分布,可求得样本的联合概率密度函数为: 其中θ是需要求得的未知量,xi是 ...
- css 雪碧图
CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问 该页面时,载入的图片就不会像以前那样一幅一幅地 ...
- [poj2135]Farm Tour(最小费用流)
解题关键:最小费用流 代码一:bellma-ford $O(FVE)$ bellman-ford求最短路,并在最短路上增广,速度较慢 #include<cstdio> #include& ...
- [原创]SQL表值函数:把用逗号分隔的字符串转换成表格数据
我们日常开发过程中,非常常见的一种需求,把某一个用逗号或者/或者其他符号作为间隔的字符串分隔成一张表数据. 在前面我们介绍了 [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式,当然按照这 ...