精华内容
下载资源
问答
  • //1、使用关键字new创建对象(没有参数调用无参构造、传入参数调用带参构造) Girlfriend girlfriend01 = new Girlfriend(); Girlfriend girlfriend02 = new Girlfriend("y", 18);1234new 一个对象经过了哪些过程?2...

    1、用new关键字创建对象,需要使用构造器。

      //1、使用关键字new创建对象(没有参数调用无参构造、传入参数调用带参构造)  Girlfriend girlfriend01 = new Girlfriend();  Girlfriend girlfriend02 = new Girlfriend("y", 18);1234

    new 一个对象经过了哪些过程?

    2、使用反射机制创建对象,用Class类或Constructor类的newInstance()方法。

    当使用Class类里的newInstance()方法,调用的是无参构造方法。

    当使用java.lang.reflect.Constructor类里的newInstance方法,调用的是有参构造方法。

    1、Class类里的newInstance()

    调用的是无参构造方法

    368001a95d4677956e5ca0829363889c.png

    2、Constructor类的newInstance()方法

    调用的是有参构造方法

    0508cc627b32addc6a946ff5e512d29f.png

    3、通过object类的clone方法

    需要实现Cloneable接口,重写object类的clone方法。无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。

    15272c5acb70cf0824a248626b1cc4ae.png

    4、使用反序列化

    通过ObjectInputStream的readObject()方法反序列化类当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象。为了反序列化一个对象,我们需要让我们的类实现Serializable接口。在反序列化时,JVM创建对象并不会调用任何构造函数。

    f0f2864f361341cd937882189954ebe0.png

    通过反序列化生成对象的过程主要由以下几个步骤:

    1、创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;

    2、 通过对象输入流的readObject()方法读取对象。

    a7b71f282bf00277c0cc9f674fd238a7.png
    2dc7ac4da650805a866c5421003b2d48.png

    序列化工具类

    public class ObjectUtils {    public static  T clone(Girlfriend obj) {        T cloneObj = null;        try {            //写入字节流            ByteArrayOutputStream out = new ByteArrayOutputStream();            ObjectOutputStream obs = new ObjectOutputStream(out);            obs.writeObject(obj);            obs.close();            //分配内存,写入原始对象,生成新对象            ByteArrayInputStream bis = new ByteArrayInputStream(out.toByteArray());            ObjectInputStream ois = new ObjectInputStream(bis);            //返回新生成的对象            cloneObj = (T) ois.readObject();            bis.close();            out.close();        } catch (IOException | ClassNotFoundException e) {            e.printStackTrace();        }        return cloneObj;    }}1234567891011121314151617181920212223242526

    创建对象各方法的代码

     public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException {        //1、使用关键字new创建对象(没有参数调用无参构造、传入参数调用带参构造)        Girlfriend girlfriend01 = new Girlfriend();        Girlfriend girlfriend02 = new Girlfriend("y", 18);        //2、使用反射机制创建对象,使用Class的newInstance()调用默认的无参构造        Girlfriend girlfriend03 = Girlfriend.class.newInstance();        //反射机制2,调用带参        Class> p1 = Class.forName("com.yky.Girlfriend");        Constructor> constructor = p1.getConstructor(String.class, Integer.class);        Girlfriend girlfriend04 = (Girlfriend) constructor.newInstance("k", 18);        System.out.println(girlfriend04);        //3、使用object类的clone方法        Girlfriend girlfriendClone = (Girlfriend) girlfriend04.clone();        System.out.println("girlfriendClone="+girlfriendClone);        //4、使用序列化反序列化生成对象        Girlfriend clone = ObjectUtils.clone(girlfriend04);        System.out.println("clone"+clone);        System.out.println("girlfriend04和反序列化生成的clone相等吗");        System.out.println(clone == girlfriend04);    }

    来源:https://blog.csdn.net/qq_44895397/article/details/108160294?utm_medium=distribute.pc_category.none-task-blog-hot-2.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-2.nonecase&request_id=

    展开全文
  • 答案:C 子类是不继承父类的构造方法的,而是必须调用其父类的构造方法。 abstract类的子类可以是abstract类,如果是非abstract类,就必须重写父类中所有的abstract方法。 D中子类新增的方法是不能直接操作被子类...
    bb2753c31993322ef834bc14e115da86.png

    1,volatile关键字是否能保证线程安全?()

    答案:否

    volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对volatile的写操作,无法保证线程安全。

    假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时volatile关键字修改之后,还是会存在并发的情况。

    2,下面哪个流类属于面向字符的输入流( )

    A、BufferedWriter

    B、FileInputStream

    C、ObjectInputStream

    D、InputStreamReader

    答案:D

    Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。

    面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。

    面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。

    3,Java能不能不通过构造函数创建对象()

    A、能 B、不能

    答案:A

    Java创建对象的几种方式:

    (1) 用new语句创建对象,这是最常见的创建对象的方法。

    (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

    (3) 调用对象的clone()方法。

    (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

    (1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

    4,下列哪个叙述是正确的()

    A.子类继承父类的构造方法。

    B.abstract类的子类必须是非abstract类。

    C.子类继承的方法只能操作子类继承和隐藏的成员变量。

    D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。

    答案:C

    子类是不继承父类的构造方法的,而是必须调用其父类的构造方法。

    abstract类的子类可以是abstract类,如果是非abstract类,就必须重写父类中所有的abstract方法。

    D中子类新增的方法是不能直接操作被子类隐藏的成员变量的。

    5,下列哪个叙述是正确的()

    A.final类可以有子类。

    B.abstract类中只可以有abstract方法。

    C.abstract类中可以有非abstract方法,但该方法不可以用final修饰。

    D.不可以同时用final和abstract修饰同一个方法。

    E.允许使用static修饰abstract方法。

    答案:D

    用final修饰的类是不允许被继承的,A错误

    abstract类中也可以有普通成员方法,B错误

    abstract类中的非abstract方法是可以用final修饰的,而abstract方法是不可以被final修饰的,C错误

    D同上,正确

    不允许使用static修饰abstract方法,E错误。

    6,当检索一个压缩文件时,首先要建立压缩文件输入流对象,该对象()

    A、以选中的压缩文件为参数

    B、以FileInputStream对象为参数

    C、以InputStreamReader对象为参数

    D、以BufferedReader对象为参数

    答案:B

    在java.io包中提供了对压缩文件进行操作的能力。它是通过压缩文件输入流与压缩文件输出流来实现的,其分别继承自InflaterInputStream与DeflaterOutputStream。

    在创建压缩文件输入流时,其初始化参数是一个FileInputStream类的实例。

    7,已知一个有序线性表为()(13,18,24,35,47,50,62,83,90,115,134),当用二分法查找值为90的元素时,查找成功的比较次数为( )

    A,1 B,2 C,3 D,9

    答案:B

    根据二分法查找需要两次:首先将90与表中间的元素50进行比较,由于90大于50,所以在线性表的后半部分查找;第二次比较的元素是后半部分的中间元素,即90,这时两者相等,即查找成功。

    8,Java程序的并发机制是( )

    A.多线程

    B.多接口

    C.多平台

    D.多态性

    答案:A

    Java是通过多线程实现并发机制的。多线程是指一个程序中包含多个执行流, 多线程程序设计的含义是可以将程序任务分成几个并行的子任务。

    9,下列选项中,不属于模块间耦合的是( )

    A.数据耦合

    B.标记耦合

    C.异构耦合

    D.公共耦合

    答案:C

    模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从弱到强,可以将其分成7级。

    分别是非直接耦合、数据耦合、标记耦合、控制 耦合、外部耦合、公共耦合和内容耦合。其中没有异构耦合这种方式。

    10,下列关于内部类的说法不正确的是 ( )

    A,内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用

    B,内部类可以使用它所在类的静态成员变量和实例成员变量

    C,内部类不可以用abstract修饰符定义为抽象类

    D,内部类可作为其他类的成员,而且可访问它所在类的成员

    答案:C

    内部类不仅可以用abstract修饰定义为抽象类,也可以用private或protected定义,所以选项C说法错误。

    7dae9e72dafd295191d412de191b1fea.png
    展开全文
  • 其是应该说是实例化对象时被调用,一个类的创建默认有一个无参构造方法,当你实例化的时候(new Object())调用构造方法哪些特点 构造方法是类中比较特殊的方法,有如下几个特点: 方法名与类名相同...

    看到这个题,你肯定要不就是在面试的路上,要不就是在刚学习的路上,要不就是连题目也没明白;

    构造方法何时被调用 ( )

    A.类定义时
    B.创建对象时
    C.调用对象方法时
    D.使用对象的变量时

    正确答案

    B

    答案解析

    其是应该说是实例化对象时被调用,一个类的创建会默认有一个无参构造方法,当你实例化的时候(new Object())会被调用。

    构造方法有哪些特点

    构造方法是类中比较特殊的方法,有如下几个特点:

    1. 方法名与类名相同;
    2. 方法没有返回值;
    3. 构造方法可以重载(不限于参数个数以及参数类型);
    4. 每个类默认会有一个无参的构造函数。
    展开全文
  • 其是应该说是实例化对象时被调用,一个类的创建默认有一个无参构造方法,当你实例化的时候(new Object())调用构造方法哪些特点 构造方法是类中比较特殊的方法,有如下几个特点: 方法名与类名相同...

    参考链接: 有关Java构造函数的面试问题

    看到这个题,你肯定要不就是在面试的路上,要不就是在刚学习的路上,要不就是连题目也没明白; 

     

    构造方法何时被调用 ( ) A.类定义时 B.创建对象时 C.调用对象方法时 D.使用对象的变量时 

    正确答案 

    答案解析 

    其是应该说是实例化对象时被调用,一个类的创建会默认有一个无参构造方法,当你实例化的时候(new Object())会被调用。 

    构造方法有哪些特点 

    构造方法是类中比较特殊的方法,有如下几个特点: 

    方法名与类名相同;方法没有返回值;构造方法可以重载(不限于参数个数以及参数类型);每个类默认会有一个无参的构造函数。

    展开全文
  •  我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会调用构造函数。那么我们在定义和调用构造函数时,需要注意哪些细节呢? 牛客网Java刷题知识点之构造函数与set方法、与类名同名的一般方法、...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。一、构造器的引入引入...
  • 构造方法是什么 在java类中,如果不显示声明构造函数,JVM 给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。...2.构造方法调用是在创建一个...
  • 有过java基础的同学肯定绕不开这个小山坡,静态代码块、非静态代码块、静态方法、构造方法、构造代码块,这些,哪些先执行,哪些后执行,为什么呢? 首先,先说下论点,再用code佐证,最后探讨机制。 java类加载顺序...
  • 全部展开让我们先谈谈安全性,让我们了解一下概念JAVA语言的反射机制:在Java运行时环境中动态方法调用 为什么不安全,对于任何类,我都可以知道该类具有哪些属性和方法吗?我可以为任何对象调用他的方法吗?这些答案...
  •  我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会调用构造函数。那么我们在定义和调用构造函数时,需要注意哪些细节呢? 需要注意的细节:构造函数与set方法 class Person { ...
  • 通过我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会调用构造函数。那么我们在定义和调用构造函数时,需要注意哪些细节呢?需要注意的细节:构造函数与set方法classPerson {privateString name;...
  • ==Java在执行子类的构造方法前,会先调用父类的构造函数,如果没有用super()来调用父类特定的构造方法,则会调用父类中的无参构造方法。==因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用...
  • 之前在学习 ES6 的时候,看到 Set 和 Map,不知道其应用场景有哪些,只觉得很多时候用在数组去重和数据存储,后来慢慢才领悟到 Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。本文在gitthub做了...
  • 天梯180407

    2018-04-07 11:52:42
    天梯1804071. (不定项)以下说法错误的是()A.... 下面的对象创建方法中哪些会调用构造方法 ()?A. new语句创建对象B. 调用Java.io.ObjectInputStream的readObject方法C. java反射机制使...
  • 之前在学习 ES6 的时候,看到 Set 和 Map,不知道其应用场景有哪些,只觉得很多时候用在数组去重和数据存储,后来慢慢才领悟到 Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。SetSet 本身是一个...
  • equals和==的区别new实例化的过程反射,实现反射的方法包名的访问四种创建对象的方式,哪些会调用构造方法?你有重写过hashcode和equals方法吗? 1、谈一下对抽象、多态的理解 抽象就是将实际事物的特征抽象出来,把...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。一、构造器的引入引入...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。一、构造器的引入引入...
  • c# 类型构造

    2021-01-01 07:04:16
    例: 代码如下: class SomeType{ static SomeType(){} } jit编译器在编译一个方法时,查看代码引用哪些类型。任何类型定义了类型构造器,jit编译器都会检查当前AppDomain是否已经执行了这个类型构造器,如果没有就...
  • 此外,类型构造器永远没有参数 实例构造器的调用:JIT编译器在编译一个方法时,查看代码中都引用了哪些类型。任何一个类型定义了类型构造器,JIT编译器都会检查对当前AppDomain,是否已经执行了这个类型构造器。如...
  • 这一节我们简单的说几个...我们会调用构造函数。那么我们在定义和调用构造函数时。须要注意哪些细节呢? 第一个须要注意的细节:构造函数与set方法 看两个函数代码: class Person { private Strin...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。 一、构造器的引入 ...
  • 通过我们前几节的学习,我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会调用构造函数。那么我们在定义和调用构造函数时,需要注意哪些细节呢? 第一个需要注意的细节:构造函数与set方法 看...
  • 当new Vue实例化对象的时候,最主要的就是执行this._init()方法,这个方法是在上面「初始化Vue构造函数」时调用initMixin()函数时给Vue.prototype上添加的 所以当我们在执行new Vue()的时候,最关键的就是执行_init...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。 一、构造器的引入 ...
  • 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。 一、构造器的...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 209
精华内容 83
关键字:

哪些会调用构造方法