一、构造器(构造方法)

语法格式:

修饰符 类名(参数列表){
初始化语句;
}

  构造器的特征:

    1.它具有与类相同的名称

    2.它不声明返回值类型。(与声明为void不同)

    3.不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值

  构造器的作用:1.创建对象;2.给对象进行初始化;如Order o = new Order();  Person p = new Person(孙尚香, 15);

实例:创建Animal类的实例:Animal a = new Animal();调用构造器,将legs初始化为4.

public class Animal{
private int legs;
public Animal(){legs = 4;}//构造器,并调用构造器将legs初始化为4
(默认的构造方法前面有没有访问的修饰符跟定义的类有关,类是public的,默认的构造方法就是public,默认的类是缺省的默认的构造方法也是缺省的)
public void setLegs(int i){
legs = i;
}
public int getLegs(){
reyurn legs;
}
}

  根据参数不同,构造器可以分为如下两类:

    1.隐式无参构造器(系统默认提供)

    2.显示定义一个或多个构造器(无参、有参)

  注意:1.JAVA语言中,每个类都至少有一个构造器

        2.默认构造的修饰符与所属的类的修饰符一致

     3.一旦显示定义了构造器,则系统不再提供默认构造器

     4.一个类可以创造多个重载的构造器

     5.父类的构造器不可被子类继承

实例1:在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18.

package day11;

public class Person1 {
public Person1(){
age = 18;
}
public int age;
} package day11; public class test1 {
public static void main(String[] args){
Person1 p1 = new Person1();
System.out.println(p1.age);
}
}

运行结果为:18

实例2:修改上题中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性。

package day11;

public class Person1 {
public Person1(int a,String n){
//age = 18;
age = a;
name = n;
}
public int age;
public String name;
} package day11; public class test1 {
public static void main(String[] args){
//Person1 p1 = new Person1();
//System.out.println(p1.age);
Person1 p1= new Person1(15,"孙尚香");
System.out.println(p1.age);
System.out.println(p1.name);
}
}

运行结果为:15

      孙尚香

实例3:定义一个“点”(point)类用来表示三维空间中的点(有三个坐标)。要求如下:

    1.可以生成具有特定坐标的点对象。

    2.提供可以设置三个坐标的方法。

package day11;

public class Point {
public Point (int m,int n,int k){
x = m;
y = n;
z = k;
}
int x;
int y;
int z; public void setPoint(int m,int n,int k){
x = m;
y = n;
z = k;
} } public class test1 {
public static void main(String[] args){
Point po = new Point(1, 2, 3);//生成特定坐标点对象
po.setPoint(6, 7, 8);//设置m,n,k为6,7,8
}
}

二、构造器重载

  构造器一般用来创建对象的同时初始化对象。如

class Person{
String name;
int age;
public Person(String n, int a){
name = n;
age = a;
}
}

  构造器的重载是得对象的创建更加灵活,方便创建各种不同的对象。构造器重载举例:

public class Person{
public Person(){ //构造器重载,参数列表必须不同 }
public Person(int age){ }
public Person(String name){ }
public Person(int age, String name){ }
}

三、this关键字

  在Java中,this关键字的作用和其词义很接近,主要为:

    1.this关键字在方法内部使用,即它的作用和其词义很接近。

    2.它在构造器内使用,表示该构造器正在初始化的对象。

  this表示当前对象,可以调用类的属性、方法和构造器。当在方法内需要用到调用该方法的对象,就用this。例如:

package day12;

public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;//当形参与成员变量重名时,如果在方法内部需要使用成员变量,
this.age = age;//必须添加this来表明该变量是类成员
} public void setName(String name){
this.name = name;//在任意方法内,如果使用当前类的成员变量或成员方法,可以在其前面添加this,增强程序的阅读性
} public void setName01(String name){
this.setName(name);
} public void showInfo(){
System.out.println("姓名:" + name);
System.out.println("年龄:" +this.age);
}
}

  使用this调用本类的构造器(this可以作为一个类中,构造器相互调用的特殊格式)

package day12;

public class Person1 {
private String name;
private int age;
public Person1(){//无参构造
System.out.println("新对象实例化");
}
public Person1(String name){
this();//调用本类中的无参构造方法
this.name = name;
}
public Person1(String name, int age){
this(name);//调用一个有参数的构造方法
this.age = age;
}
public String getInfo(){
return"姓名:" + name + ",年龄:" + age;
}
}

  注意:1使用this()必须放在构造器的首行!

     2.使用this调用本类中的其他构造器,保证至少有一个构造器是不用this的。(实际上就是不能出现构造器自己调用自己).

四、JavaBean

  1.JavaBean是一种Java语言写成的可重用组件。

  2.所谓JavaBean是指符合如下标准的Java类:

    >类是公共的

    >有一个无参的公共的构造器

    >有属性值,属性一般是私有的,且有对应的get、set方法

  3.用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

package day12;
/**
* 一个完整的JavaBean
* 公共的类
* 私有的属性
* 属性对应的get和set方法
**/
public class Person2 {
private String name;//姓名
private int sex;//性别0男1女
private int age;//年龄 public void setName(String name){
this.name = name;
} public String getName(){
return this.name;
} public void setSex(int sex){
this.sex = sex;
} public int getSex(){
return sex;
} public void setAge(int age){
this.age = age;
} public int getAge(){
return this.age;
}
} package day12;
/**
* JavaBean的用法
* **/
public class test {
public static void main(String ages[]){
Person2 p2 = new Person2(); p2.setName("杜甫");
p2.setSex(0);
p2.setAge(20); System.out.println(p2.getName());
System.out.println(p2.getSex());
System.out.println(p2.getAge());
}
}

打印结果为:

  小技巧:利用Eclipse自动生成get和set方法

      在写好属性之后,在代码中鼠标右键,找到Source(快捷键Alt+Shift+S)选项,然后选中Generate Getters and Setters...,然后勾选想要生成get与set方法的属性,点击ok完成。

Java学习day11-类的成员之三:构造器(构造方法)的更多相关文章

  1. Java学习——枚举类

    Java学习——枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...

  2. Java学习-023-Properties 类 XML 配置文件读取及写入源代码

    之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFr ...

  3. Java学习——BigInteger类和BigDecimal类

    Java学习——BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.c ...

  4. Java学习——日期类

    Java学习——日期类 摘要:本文主要记录了Java开发中用到的和日期有关的类以及对日期的操作. 部分内容来自以下博客: https://www.cnblogs.com/talk/p/2680591. ...

  5. [javaSE] 反射-获取类的成员属性和构造方法

    成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import ...

  6. java 学习笔记——类之间的关系之封装、继承与多态的详解

    封装 一个封装的简单例子 封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联 ...

  7. java中对类中成员的排序

    要求:编写一个程序.程序中定义一个类circle,其中有数据成员radius:创建一个有5个circle型元素的数组,其radius值分别为2.10.8.4.121.调用Arrays.sort()给这 ...

  8. [Java学习]面向对象-类的继承;方法覆盖

    一.类的继承 实现方法: public Class SubClass extends SuperClass{ } 继承最基本作用: 代码重用. 继承最重要的作用: 方法可以重写. 关于类的继承: 子类 ...

  9. java反射获取类的成员函数,成员变量,构造函数

    package com.imooc.reflect;import javax.sound.midi.Soundbank;import java.lang.reflect.Constructor;imp ...

  10. Java学习笔记11---静态成员变量、静态代码块、成员变量及构造方法的初始化或调用顺序

    当创建一个对象时,各种成员变量及构造方法的初始化或调用顺序是怎样的呢? (1).如果类尚未加载,则先初始化静态成员变量和静态代码块,再初始化成员变量,最后调用相应的构造方法: (2).如果类已经加载过 ...

随机推荐

  1. 【长期计划】Atcoder题目泛做

    之前学长跟我说的是700-的应该都能自己做? 然后1000-的应该都能有一定的思路? 记不清了 但总之是要智力康复一下 又加上文化课比较紧 所以这个大概就会是长期计划了 ————————————分鸽线 ...

  2. Python---进阶---logging---装饰器打印日志

    #### logging - logging.debug - logging.info - logging.warning - logging.error - logging.critical --- ...

  3. vueroute的router.addRoutes

    router.addRoutes(routes: Array<RouteConfig>)动态添加更多路由到路由器.参数必须是使用与routes构造函数选项相同的路径配置格式的Array .

  4. linux运维、架构之路-redis集群

    一.介绍            redis cluster 3.0之后的功能,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了 ...

  5. CSS颜色和长度单位

    颜色 如果我们相给页面设置颜色可以采用多种方法进行设置: 一.命名颜色 假设在设置页面的颜色时觉得一部分很小的颜色集中就足够了,就可以直接给定颜色的名称.CSS称这些有名称的颜色为命名颜色. 命名颜色 ...

  6. PHP文件操作基本代码

    PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如“复制[copy]”).下面兄弟连PHP培训 小编给大家介绍的是基本的文件读写操作:(1)读文件 ;(2) ...

  7. ZeroMQ的进阶

    上一篇博文我们对ZeroMQ的经典模式做了写Demo让他跑起来了,但实际开发中我们可能面临一些远比上述复杂的场景.这时候我们需要进一步的对经典模式进行扩展,所幸ZeroMQ已经为我们做好了准备工作. ...

  8. sh_08_买苹果改进

    sh_08_买苹果改进 # 1. 提示用户输入苹果的单价 price = float(input("苹果的单价:")) # 2. 提示用户输入苹果的重量 weight = floa ...

  9. eclipse配置apache tomcat运行时访问路径不需要项目名称

    问题:tomcat运行项目默认是要带上项目名的,有时候不想要项目名来访问,如何解决呢? 方法: 1:双击打开tomcat 2:选择Modules,选择你要修改的项目 3:点击Edit,把path修改成 ...

  10. [CSP-S模拟测试]:连连看(图论+容斥)

    题目传送门(内部题74) 输入格式 输入文件$link.in$ 第一行三个整数$n,m,k$,之间用空格隔开,$n,m$表示地图行数和列数,$k$表示每个方块周围相邻的位置(至多有$4$个,至少有$2 ...