一.构造函数的规则

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关键字】的更多相关文章

  1. JavaSE复习日记 : 实例化对象/构造方法和this关键字

    /* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...

  2. java基础(十四)集合(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  3. java基础(十)面向对象(五)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  4. Java基础(十四):泛型

    一.Java 泛型: Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就 ...

  5. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

  6. 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)

    1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则)     * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...

  7. 夯实Java基础(十四)——Java8新的日期处理类

    1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...

  8. Java基础(十四)代理(Proxy)

    1.为什么要使用代理 代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 假设有一个表示接口的Class对象(有可能只包含一个接口),它的确 ...

  9. java基础(十四章)

    1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导 ...

随机推荐

  1. bootstrap 左右框多项选择示例

    bootstrap 左右选择框,左边框是未选项,右边框是已选择项,提供单选,全选按钮,以及取消已选项,如图示:

  2. BZOJ2563阿狸和桃子的游戏

    2563: 阿狸和桃子的游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 952  Solved: 682[Submit][Status][Discu ...

  3. 洛谷【P2431】正妹吃月饼

    二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:https://www.luogu.org/problemnew/show/P24 ...

  4. GSM与GPRS区别介绍

    1.    GSM是全球移动通讯系统(Global System for Mobile Communications)的简称 2.    GPRS是通用分组无线业务(General Packet Ra ...

  5. 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart

    目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...

  6. [FATAL_ERROR] Uncaught PDOException: There is already an active transaction

    [FATAL_ERROR] Uncaught PDOException: There is already an active transaction ... $mysql->beginTran ...

  7. 用户认证auth模块

    一.auth模块 from django.contrib import auth 1 .authenticate()   :验证用户输入的用户名和密码是否相同 提供了用户认证,即验证用户名以及密码是否 ...

  8. css 雪碧图

    CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问 该页面时,载入的图片就不会像以前那样一幅一幅地 ...

  9. VIewPage+Fragment

    效果图: 代码 public class NewOrderListFargmentActivity extends BaseActivity implements OnClickListener { ...

  10. JDBC编程之数据查询

    ----------------siwuxie095                             JDBC 编程之数据查询             首先下载 MySQL 的 JDBC 驱动 ...