精华内容
下载资源
问答
  • [Java教程]构造函数返回值 学习心得0 2016-01-05 15:00:11目的:本文记录了我对于构造函数不同类型返回值对实例的影响的学习心得。前言:我们知道构造函数用new操作符创建实例一般是函数体内是不需要返回值的。但是...

    [Java教程]构造函数返回值 学习心得

    0 2016-01-05 15:00:11

    目的:本文记录了我对于 构造函数不同类型返回值对实例的影响 的学习心得。

    前言:我们知道构造函数用new操作符创建实例一般是函数体内是不需要返回值的。但是构造函数的本质首先还是个函数,作为函数就能有返回值,而且在某些情况下(比如使用parasitic构造函数的设计模式)会用到构造函数的返回值。本文写作目的在于记录不同类型(基本类型、引用类型)返回值对实例的影响。

    正文:

    part1:基本类型1 function Person (name) {2 this.name=name;3 return 123;4 }5 var a=new Person("Su");6 console.dir(a); //Person

    结果:基本类型的返回值被忽略。

    part2:引用类型1 function Person (name) {2 var arr=[];3 this.name=name;4 return arr;5 }6 var a=new Person("Su");7 console.dir(a) //Array[0]

    结果:a没有成为Person的实例而是如返回值一样成为了数组。

    分析:

    为了了解这种差异的原因,我首先去研究了new 这个过程,在用new操作符创造实例时,会经历如下4个阶段:

    1.创建一个新对象,此时该对象为空对象。

    2.将构造函数的作用域赋给这个空对象(因此构造函数中的this就指向了该空对象)

    3.执行构造函数内的代码(由于this指向了该空对象,此步骤为新对象添加属性)

    4.返回新对象(这里针对构造函数没有返回值或返回值为基本类型时。如果构造函数内有引用类型的返回值,那么该返回值会替代第一步创建的对象作为构造函数的返回值。)function Person (name) { var arr=[]; this.name=name; return arr; } var a=new Person("Su");console.dir(a.constructor); //function Array()

    还是这段代码,a作为Person的实例被创造,结果他的构造函数却不是Person而是Array,可见返回值被覆盖了。

    结论:

    构造函数的返回值会影响实例。

    1.不设置返回值或返回值为基本类型时返回值为构造函数在构造实例过程中创建的对象。

    2.设置返回值为引用类型时返回值会覆盖构造函数在构造实例过程中创建的对象,此时实例其实已经与构造函数没有关系了,而是作为该引用类型的实例。

    本文网址:http://www.shaoqun.com/a/175408.html

    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

    函数

    0

    展开全文
  • java构造函数总结

    2021-03-06 18:02:48
    构造函数总结概念: 创建对象时由JVM自动调用的函数作用: 在创建对象的时候给对象的成员变量赋值;写法:修饰符:可以用访问权限修饰符(public、private等)修饰;不能用static修饰;返回值类型:没有返回值类型,连...

    构造函数总结

    概念:    创建对象时由JVM自动调用的函数

    作用:    在创建对象的时候给对象的成员变量赋值;

    写法:

    修饰符:可以用访问权限修饰符(public、private等)修饰;不能用static修饰;

    返回值类型:没有返回值类型,连void都没有;

    函数名:必须和类名完全一样;

    参数列表:可以重载,具体根据要求而定;

    return语句:有,但是一般都不需要写;

    执行过程:

    创建对象时,JVM遇到new关键字,首先要到堆内存中开辟对象空间;然后在对象空间中为成员变量分配空间,赋默认值;

    然后再根据new关键字后面的内容,调用相应的构造函数进栈执行;等到构造函数执行结束,对象创建完成;

    默认构造函数:

    所有类中都至少有一个构造函数,如果一个类中没有书写构造函数,编译器就会帮我们添加一个无参的构造函数,这个构造函数就是默认构造函数;

    一旦类中书写了构造函数,就不会再有默认构造函数;

    使用细节:

    构造函数可以调用一般函数;

    一般函数不能调用构造函数;

    构造函数可以调用构造函数,不能通过函数名调用,必须通过this关键字调用;

    在构造函数中使用this语句调用其他构造函数,this语句必须写在构造函数的第一行;

    构造函数之间相互调用,不能出现交叉调用(递归调用);

    1、什么时候需要使用构造函数?

    只要创建对象,都要使用构造函数;

    2、什么时候需要自定义构造函数?

    如果希望在创建对象时就给成员变量赋值,就需要自定义构造函数;

    3、使用构造函数,可以在创建对象的时候就给对象的成员变量赋初始值,那么,有了构造函数,还需要提供get和set方法吗?

    需要;因为构造函数只能在创建对象的时候赋值一次;如果以后想要改变这个值,就需要用到set函数;如果需要获取被封装的值,就需要用到get函数;

    构造函数和一般函数的区别

    1、从书写格式上看:

    a)         构造函数:没有返回值类型,连void都不能写;构造函数的函数名必须和类名一样;不能用static关键字修饰;

    b)        一般函数:必须有一个返回值类型(是和构造函数最主要的区别);一般函数名不要和类名一样;可以用static修饰,也可以不要;

    如果一个函数函数名和类名一样,是否是构造函数,就要看有没有返回值类型;没有,就是构造函数;

    2、从调用方式上看:

    a)         构造函数:创建对象时由JVM调用的;一般函数不能调用构造函数;

    b)        一般函数:哪里需要哪里就可以调用;构造函数里面也可以调用一般函数;

    3、从作用上看:

    a)         构造函数:主要用来在创建对象的时候,给对象的成员变量赋值用的;

    b)        一般函数:实现某个具体功能;

    4、从一个对象可以调用次数上看:

    a)         构造函数:只有创建对象时会调用一次;

    b)        一般函数:没有次数限制;

    展开全文
  • JAVA构造函数(方法)

    2021-02-25 19:22:12
    一、什么是构造函数Java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与相同,无返回值。作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。在现实生活中,很多...

    一、什么是构造函数

    Java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与相同,无返回值。

    作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。

    在现实生活中,很多事物一出现,就天生具有某些属性和行为。比如人一出生,就有年龄、身高、体重、就会哭;汽车一出产,就有颜色、有外观、可以运行等。这些,我们就可以将这些天然的属性和行为定义在构造函数中,当new实例化对象时,也就具有这些属性和方法了,没必要再去重新定义了,从而加快了编程效率。

    构造函数是对象一建立就运行,给对象初始化,就包括属性,执行方法中的语句。

    而一般函数是对象调用才执行,用".方法名“的方式,给对象添加功能。

    一个对象建立,构造函数只运行一次。

    而一般函数可以被该对象调用多次。

    二、构造函数的特点

    1、函数名与类名相同

    2、不用定义返回值类型。(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)

    3、不可以写return语句。(返回值类型都没有,也就不需要return语句了)

    注:一般函数不能调用构造函数,只有构造函数才能调用构造函数。

    三、示例

    1、无参构造函数中只定义了一个方法。new对象时,就调用与之对应的构造函数,执行这个方法。不必写“.方法名”。

    package javastudy;

    public class ConfunDemo {

    public static void main(String[] args) {

    //输出Hello World。new对象一建立,就会调用对应的构造函数Confun(),并执行其中的println语句。

    Confun c1=new Confun();

    }

    }

    class Confun{

    Confun(){

    //定义构造函数,输出Hello World

    System.out.println("Hellow World");

    }

    }

    输出:

    Hellow World

    2、有参构造函数,在new对象时,将实参值传给private变量,相当于完成setter功能。

    package javastudy;

    public class ConfunDemo3 {

    public static void main(String[] args){

    //实例化对象时,new Person()里直接调用Person构造函数并转转实参,相当于setter功能

    Person z = new Person("aerchi",18);

    z.show();

    }

    }

    class Person{

    private String name;

    private int age;

    //有参数构造函数,实现给private成员变量传参数值的功能

    public Person(String n,int m){

    name=n;

    age=m;

    }

    //getter

    //实例化对象时,完成了sett功能后,需要getter,获取实参值。

    public String getName(){

    return name;

    }

    public int getAget(){

    return age;

    }

    //获取private值后,并打印输出

    public void show(){

    System.out.println(name+"\n"+age);

    }

    }

    输出:

    aerchi

    18

    以上代码,我们也可以将show()方法中的输出语句直接放在构造函数中,new对象时,即可直接输出值,如下

    package javastudy;

    public class ConfunDemo3 {

    public static void main(String[] args){

    //实例化对象时,new Person()里直接调用Person构造函数并转转实参,同时执行输出语句

    Person z=new Person("aerchi", 18);

    }

    }

    class Person{

    private String name;

    private int age;

    //有参数构造函数,实现给private成员变量传参数值的功能,同时直接输出值

    public Person(String n,int m){

    name = n;

    age = m;

    System.out.println(name+"\n"+age);

    }

    }

    输出:

    aerchi

    18

    class ConFun

    {

    public static void main(String[] args){

    Person a=new Person(18,"aerchi");

    System.out.println(a.getAge()++", "+a.getName());

    }

    }

    class Person

    {

    private int age;

    private String name;

    public Person(int x,String y){

    age=x;

    name=y;

    }

    public int getAge(){

    return age;

    }

    public String getName(){

    return name;

    }

    }

    3、一个对象建立后,构造函数只运行一次。

    如果想给对象的值再赋新的值,就要使用set和get方法,此时是当做一般函数使用

    如下:

    package javastudy;

    public class ConfunDemo4 {

    public static void main(String[] args) {

    PersonDemo s=new PersonDemo("张三",18); //new对象时,即调用对应的构造函数,并传值。同时,不能new同一个对象多次,否则会报错。

    s.setName("李四"); //对象建立后,想变更值时,就要用set/get方法,重新设置新的值

    s.setName("王二麻子"); //并可调用对象多次。

    s.print();

    }

    }

    class PersonDemo{

    private String name;

    private int age;

    PersonDemo(String n,int m){ //建立有参构造函数,用于给两个private变量name、age赋值,同时输出值

    name=n;

    age=m;

    System.out.println("姓名:"+name+"\n"+"年龄:"+age);

    }

    public void setName(String x){ //set方法,用于再次给name赋值

    name=x;

    }

    public String getName(){ //get方法,用于获取name的赋值

    return name;

    }

    public void print(){

    System.out.println(name);

    }

    }

    输出结果:

    姓名:张三

    年龄:18

    王二麻子

    四、默认构造函数

    当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方便该类初始化。只是该空构造函数是隐藏不见的。

    如下,Person(){}这个默认构造函数是隐藏不显示的。

    class Person

    {

    //Person(){}

    }

    当在该类中自定义了构造函数,默认构造函数就没有了。

    如果仍要构造函数,则需要自己在类中手动添加。

    五、构造函数的重载

    构造函数也是函数的一种,同样具备函数的重载(Overloding)特性。

    class Person

    {

    private String name;

    private int age;

    Person()

    {

    System.out.println("A:name="+name+":::age="+age);

    }

    Person(String n)

    {

    name = n;

    System.out.println("B:name="+name+":::age="+age);

    }

    Person(String n,int a)

    {

    name=n;

    age=a;

    System.out.println("C:name="+name+":::age="+age);

    }

    }

    class PersonDemo2

    {

    public static void main(String[] args)

    {

    Person p1=new Person();

    Person p2=new Person("aerchi");

    Person p3=new Person("aerchi",18);

    }

    }

    输出结果:

    A:name=null:::age=0

    B:name=aerchi:::age=0

    C:name=aerchi:::age=18

    class Person

    {

    private String name;

    private int age;

    Person()

    {

    System.out.println("A:name="+name+":::age="+age);

    cry();

    }

    Person(String n)

    {

    name = n;

    System.out.println("B:name="+name+":::age="+age);

    cry();

    }

    Person(String n,int a)

    {

    name=n;

    age=a;

    System.out.println("C:name="+name+":::age="+age);

    cry();

    }

    void cry()

    {

    System.out.println("Haha...............");

    }

    }

    class PersonDemo2

    {

    public static void main(String[] args)

    {

    Person p1=new Person();

    Person p2=new Person("aerchi");

    Person p3=new Person("aerchi",18);

    }

    }

    输出结果:

    A:name=null:::age=0

    Haha...............

    B:name=aerchi:::age=0

    Haha...............

    C:name=aerchi:::age=18

    Haha...............

    六、构造函数的继承

    1、子类中无参构造函数,可直接继承父类中无参构造函数,前提是所有变量均为public

    如下:父类Student中有空构造函数Student(),子类Pupil中有空构造函数Pupil(),后者会继承前者。

    注:在本例中,父类中的name、height都是public的,如果是private就无法直接继承。

    package javastudy;

    public class ConfunDemo5 {

    public static void main(String[] args) {

    Pupil z = new Pupil();

    z.show();

    }

    }

    class Student{    //父类Student

    public String name;

    public int height;

    public Student()

    {

    this.name="";

    this.height=0;

    }

    }

    class Pupil extends Student{   //子类Pupil

    private int score;

    public Pupil(){ //无参构造函数Pupil()直接继承了父类中的无参构造函数Student()

    score=0;

    }

    public void show(){

    System.out.print("姓名:"+name+"\n身高:"+height+"\n分数:"+score);

    }

    }

    输出:

    姓名:

    身高:0

    分数:0

    2、子类中无参构造函数继承父类中无参构造函数时,父类参数是private的,无法直接访问。需要在父类中使用get方法来调用私有变量值。

    package javastudy;

    public class ConfunDemo5 {

    public static void main(String[] args) {

    Pupil z=new Pupil();

    z.show();

    }

    }

    class Student{ //父类Student

    private String name;

    private int height;

    public Student()

    {

    this.name="";

    this.height=0;

    }

    public String getName(){

    return name;

    }

    public int getHeight(){

    return height;

    }

    }

    class Pupil extends Student{ //子类Pupil

    private int score;

    public Pupil(){ //无参构造函数Pupil()直接继承了父类中的无参构造函数Student(),但是父类中的name、height是private的

    score=0;

    }

    public void show(){

    System.out.print("姓名:"+getName()+"\n身高:"+getHeight()+"\n分数:"+score); //输出时,直接用get方法名。

    }

    }

    3、使用super调用父类的构造函数

    super必须写在方法的首行

    package javastudy;

    public class ConfunDemo5 {

    public static void main(String[] args) {

    Pupil z=new Pupil("王二麻子",100,200);

    z.show();

    Pupil w=new Pupil();

    w.show();

    }

    }

    class Student{ //父类Student

    public String name;

    public int height;

    public Student()

    {

    this.name="";

    this.height=0;

    }

    public Student(String n,int m)

    {

    name=n;

    height=m;

    }

    }

    class Pupil extends Student{ //子类Pupil

    private int score;

    public Pupil(){

    super("刘德花",501); //使用super调用父类Student(String n,int m)方法,同时传递实际数值。super必须写在方法的首行。如果这里写super(),则调用的是父类中的Student()方法。

    score=0;

    }

    public Pupil(String x,int y,int z){ //

    super(x,y); //使用super调用父类Student(String n,int m)方法,其中super中的参数名称必须与构造函数中的参数名称一致。

    score=z;

    }

    public void show(){

    System.out.println("姓名:"+name+"\n身高:"+height+"\n分数:"+score);

    }

    }

    输出:

    姓名:王二麻子

    身高:100

    分数:200

    姓名:刘德花

    身高:501

    分数:0

    展开全文
  • $ cat Const.javapublic class Const {String Const(String hello) {return hello;}public static void main(String[] args) {System.out.println(new Const("Hello!"));}}$ javac Const.javaConst.java:7: cannot f...

    $ cat Const.java

    public class Const {

    String Const(String hello) {

    return hello;

    }

    public static void main(String[] args) {

    System.out.println(new Const("Hello!"));

    }

    }

    $ javac Const.java

    Const.java:7: cannot find symbol

    symbol : constructor Const(java.lang.String)

    location: class Const

    System.out.println(new Const("Hello!"));

    ^

    1 error

    解决方案

    What you've defined isn't actually a constructor, but a method called Const. If you changed your code to something like this, it would work:

    Const c = new Const();

    System.out.println( c.Const( "Hello!" ) );

    If no specific constructor is explicitly defined, the compiler automatically creates a no-argument constructor.

    展开全文
  • 曾经遇到一个面试题——构造函数有没有返回值?今天调查一番后,给出确切的答案:构造函数没有返回值。我们使用构造函数构造一个String字符串str:String str = new String("abc");这里的new 是调用构造函数,在堆里...
  • 众所周知,在java里是不能给构造函数返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个...
  • 构造函数Java中是否有返回类型?

    千次阅读 2021-03-07 00:37:52
    不,构造函数Java中没有任何返回类型。构造函数看起来像方法,但不是。它没有返回类型,并且其名称与类名称相同。通常,它用于实例化类的实例变量。如果程序员不编写构造函数,则编译器将代表他编写构造函数。示例...
  • (若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)构造函数与默认构造函数构造函数构造函数,主要是用来在创建对象时初始化对象,一般会跟new运算符一起使用,给对象成员变量赋初值。cl...
  • 构造函数:⑴方法名和类名相同,而且没有返回类型(包括 void 也没有);⑵没有返回值;⑶如果没有输入构造函数,jvm会自动帮我们创建一个不带参数,没有任何函数体的的构造函数;如果我们手动的创建了其他构造函数,...
  • 为什么我将null参数传递给构造函数我是否会得到NullPointerException?这是我的榜样new AttendeeDetail("Gus Goose","1151","15-01-2012",(Integer) null,null)这是班级:public class AttendeeDetail {private ...
  • java构造函数怎么写

    千次阅读 2021-03-01 07:47:12
    java构造函数怎么写发布时间:2020-06-29 11:50:19来源:亿速云阅读:114作者:Leahjava构造函数怎么写?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易...
  • 什么是java构造函数

    2021-03-06 00:12:38
    构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过...
  • 3、基本数据类型(String、int、….)修饰的函数类型,要有return返回值。4、void修饰的函数函数中的return语句可以省略不写。5、函数名可以根据需求进行命名。代码示例:(有无函数/方法的区别)无...
  • 谈谈java中的构造函数

    2021-02-27 15:03:39
    本篇博文主要是为新手、对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数的一些看法。...
  • 本篇博文主要是为新手、对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数的一些看法。...
  • 使用构造器时需要记住:1.构造器必须与类同名(如果一个源文件中有多个类,...构造器总是伴随着new操作一起调用示例:A.javapublic class A{public A(){System.out.println("调用了无参的构造函数");}public A(String...
  • java构造函数执行顺序

    2021-04-18 00:52:18
    D、一般在创建新对象时,系统会自动调用构造函数。 17. 下列哪些语句关于 Java 内存回收的说明是正确的? () A、程序员必须创建一个线程来释放内存 B、内存回收......Java 中的继承允许一个子类继承多个父类 B) 父类更...
  • 小伙伴们知道构造函数吧,那你们知道构造函数是否能重载吗?这次让我们来详细了解一下构造函数和重载吧。------------------构造---------------------什么是构造方法:1、是个方法2、在创建对象时,由new这个关键字...
  • public class Student{ public int stuId; public String stuName; public int stuAge; public int stuScore;...但如果此类中有任何构造函数则系统不会创建任何得构造函数 系统创建的构造函数为 : public 类名(){ }
  • java 构造函数问题

    2021-03-14 01:19:12
    1、构造函数什么时候被调用,被谁调用?当然,只有在NEW的时候,才会真正的创建这个对象,只有在创建时才会调用该类的构造函数。如:ClassA{publicA(){System.out.println("这是A的构造函数");}}ClassTest{...
  • java中构造函数的使用方法发布时间:2020-06-26 18:08:07来源:...1、java构造函数也叫构造方法,是java中一种特殊的函数。函数名与类名相同,无返回值。作用:一般用来初始化成员属性和成员方法的,即new对象产生后...
  • 首先,先说结论,按照最简单的方式理解就行了:构造方法没有 return 任何东西,所以没有返回值。// 构造方法的声明,就像是一个没有返回值的方法声明。a constructor declaration looks just like a method ...
  • java构造函数是什么

    2021-02-12 11:09:09
    构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过...
  • 今天就来为大家介绍java构造函数的特点是什么,并且通过图片为大家解析。一起来看看吧。一、首先介绍一下构造函数的概念它是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new...
  • 本文主要是为新手、对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数的一些看法。希望走在java...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,467
精华内容 75,786
关键字:

java构造函数返回值

java 订阅