Java 构造函数

package com.fish.object;
/*
java是 面向对象的语言: "万物皆对象": 任何事物都可以使用类进行描述。
需求: 使用java类描述 一个婴儿.
在现实生活中有两种婴儿, 一种婴儿一出生就具备了名字(白户),还有一种婴儿就是 出生之后才有名字 的(黑户)。

构造函数:
构造函数的作用: 给对应的对象进行初始化。
构造函数的定义的格式:

修饰符  函数名(形式参数){
    函数体...
}
构造函数要注意的细节:
1. 构造函数 是没有返回值类型的。
2. 构造函数的函数名必须要与类名一致。
3. 构造函数并不是由我们手动调用的,而是在创建对应的对象时,jvm就会主动调用到对应的构造函数。
4. 如果一个类没有显式的写上一个构造方法时,那么java编译器会为该类添加一个无参的构造函数的。
5. 如果一个类已经显式的写上一个构造方法时,那么java编译器则 不会再为该类添加 一个无参 的构造方法。
6. 构造函数是 可以在一个类中以函数重载 的形式存在多个的。

疑问:创建对象时,jvm就会调用到对应的构造方法,那么我们以前没有学构造方法,那么
以前创建对象时,jvm是否 也会调用构造方法呢?如果有?构造方法从何而来呢?
会调用, java编译器在编译的时候给加上去的。

jdk提供了一个java开发工具(javap.exe)给我们进行反编译的。
javap 反编译工具的使用格式:
javap -c -l -private 类名

疑问:java编译器添加 的无参构造方法的权限修饰符是什么?
与类的权限修饰是一致的。

构造函数与普通 函数的区别:
1. 返回值类型的区别:
    1. 构造函数是没有返回值类型 的,
    2. 普通函数是有返回值类型的,即使函数没有返回值,返回值类型也要写上void。
2. 函数名的区别:
    1. 构造函数的函数名必须要与类名一致,
    2. 普通函数的函数名只要符合标识符的命名规则即可。
3. 调用方式的区别:
    1. 构造函数是 在创建对象的时候由jvm调用的。
    2. 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,
4. 作用上的区别:
    1. 构造函数 的作用用于初始化一个对象。
    2. 普通函数是用于描述一类事物的公共行为的。
*/

//婴儿类
class Baby{
    
    int id; //*** 
    String  name;  //名字
    
    //构造函数
    public  Baby(int i , String n){
        id  = i;
        name = n;
        System.out.println("baby的属性初始化完毕!!");
    }
    
    //无参 的构造函数
    public Baby(){
        System.out.println("无参的构造函数被调用了..");
    }
    
    //哭
    public void cry(){
        System.out.println(name+"哇哇哭...");
    }
}

class Demo2 {
    public static void main(String[] args){
        //创建一个baby对象
        Baby b1 = new Baby(110,"狗娃"); //婴儿诞生   白户
        System.out.println("编号:"+ b1.id +" 姓名:"+ b1.name);
        b1.cry();
        b1.cry();
        /*
        //黑户
        Baby b2 = new Baby();
        new Baby();
        b2.id = 112;
        b2.name = "狗剩";
        System.out.println("编号:"+ b2.id +" 姓名:"+ b2.name);
        */
    }
}
时间: 2024-12-12 13:00:13

Java 构造函数的相关文章

JAVA构造函数

一.什么是构造函数 java构造函数,也叫构造方法,是java中一种特殊的函数.函数名与相同,无返回值. 一般用来给对象进行初始化. 在现实生活中,很多事物一出现,就天生具有某些属性和行为.比如人一出生,就有年龄.身高.体重.就会哭:汽车一出产,就有颜色.有外观.可以运行等.这些,我们就可以将这些天然的属性和行为定义在构造函数中,当new实例化对象时,也就具有这些属性和方法了,没必要再去重新定义了,从而加快了编程效率. 构造函数是对象一建立就运行,给对象初始化. 而一般方法是对象调用才执行,是给

java构造函数修饰符

今天看了剑指offer中的第二章-面试需要的基础知识,对其中的一段C#面试代码,比较感兴趣,想着能否给改成java,结果没改成,出现了问题,本文是针对这一点来总结一下,下面是C#与java代码,但是在eclipse环境下,java代码如此改写,编译器提醒构造函数有问题,究其原因,问题是由java的构造函数前的访问修饰符public与特殊修饰符static所导致的. java 构造函数,可以被访问修饰符修饰,而不能被特殊修饰符修饰:(在编译器经过测试) 访问修饰符: public (最常用,其他类

java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数

问题一:java的构造函数能否被继承? 笔者初学java看的一本书说:“java的子类自然的继承其超类的“非private成员”. 通常java的构造函数被设置为public的(若你不写构造函数,java自动添加的无参空构造函数就是public的),因本文中的类都在同一个包中,因此使用无修饰的友好权限说明问题,对于private构造函数的意义,可参见这里. 那么根据该书所述规则,非private的构造函数当然也应该被子类继承. 但实际上,子类不仅无法继承private成员,也无法继承构造函数.

java构造函数,java的静态块理解

今天我遇到这样的代码块,理解甚久,现在理解了,举一些例题给你看看 先创建一个One类: package accp.com;/** * 其中一个类 * @author xuxiaohua * */public class One { public One(String str){ //定一个构造函数 System.out.println(str); }} 再创建一个Two类: package accp.com; public class Two { One one=new One("one1&qu

java构造函数使用方法总结 (继承与构造函数)

使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器总是伴随着new操作一起调用 示例: A.java Java代码 public class A{ public A(){ System.out.println("调用了无参的构造函数"); } public A(String mess){ System.out.println

为什么java构造函数的构造器只能在第一行写this() 或者super() ?

最近在看内部类, 但是被“为什么匿名内部类或者局部内部类使用方法的局部变量时, 局部变量一定得是final类型”困扰着, 在网上查找资料的时候, 发现我对类初始化完全不了解, 之前的认识都是错误! 所以回头又看了看基础的初始化, 在看初始化的时候, 就发现一点, 就是“为什么只能在构造器的第一行写this() 或者super()?” 我比较笨,又想了好久,上网查了下资料,看了看书才明白. 在说这个问题之前,首先得要明白super()和this()的意义: this() 之所以存在, 我个人认为原

Java 构造函数问题

JAVA一个类有两个构造函数,当在一个构造函数中调用另外一个构造函数时为什么要用this.()而不能用类名.() 如果存在参数类型可以,如果类型也完全相同的话则不行,只能另外取一个名字.方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数.调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法.方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数不同的方法.方法重载是让类以统一的方式处理不同类型数据的一种手段.Java的方

java 构造函数内部的多态方法 完全剖析

我们先来看一个例子,如果你读过<java编程思想>的话 应该会有印象 1 package com.test.zj; 2 3 public class PolyConstructors { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 new RoundGlyph(5); 8 } 9 10 } 11 12 class RoundGlyph extends Glyph { 13

Think in Java 构造函数_继承_super()_android_Dialog()_为何有些类没有构造函数自己体悟

首先是因为自己看到了去看了张龙老师的教程 里面说到关于 多态的一个很直观的体现就是:构造函数的不同 还有就是父类和子类之间的构造函数的调用关系 具体来说:子类继承父类,并且创建子类对象过程中 首先new 子类(无参)的过程之前有说过的(是没有继承的情况) 有继承的情况下,首先要执行调用子类的默认无参构造函数,执行里面的第一行语句:默认的隐式调用父类的默认的无参构造函数[觉得这句话不对,觉得应该是先加载的父类之后,可是怎么知道调用的就是父类的默认的无参构造函数呢?要是子类之命了是其他的构造函数,那