精华内容
下载资源
问答
  • new创建对象是否调用构造函数和析构函数

    千次阅读 多人点赞 2019-11-18 19:43:25
    1.指针不会调用构造和析构函数,只是定义了一个指针,没有申请内存:...使用new创建对象时,申请分配内存,调用构造函数: 当我们使用new为指针开辟空间,然后用delete释放掉空间会分别调用构造和析构函数: ...
    • 1.指针不会调用构造和析构函数,只是定义了一个指针,没有申请内存:
      在这里插入图片描述

    • 使用new创建对象时,申请分配内存,调用构造函数:
      在这里插入图片描述

    • 当我们使用new为指针开辟空间,然后用delete释放掉空间会分别调用构造和析构函数:
      在这里插入图片描述

    展开全文
  • !...创建子类对象时,Student s = new Student("school"); 该构造方法中没有显示调用父类的 构造方法,但还是编译成功了,!...该构造方法调用自身的构造函数,此构造函数中有调用父类的构造方法,执行成功的原因是什么
  • 我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???  :   答:因为一个类,提供了多种构造方法,传入的实参不同,构造的对象也不同,该对象的功能和用途也不同。

    我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???

           :

     

    答:因为一个类,提供了多种构造方法,传入的实参不同,构造的对象也不同,该对象的功能和用途也不同。

    展开全文
  • 子类继承父类时,创建对象,构造方法调用问题

    万次阅读 多人点赞 2017-11-03 21:05:00
    在学习继承的时候,遇到一些小问题,这里总结一下,有错误望指正: 先来看一段代码: //标准父类 class Father{ ... //构造方法 //空参 public Father(){ } //有参 public Father(String nam

    在学习继承的时候,遇到一些小问题,这里总结一下,有错误望指正:

    先来看一段代码:

    //标准父类
    class Father{
    	//成员变量
    	private String name;
    	private int age;
    	
    	//构造方法 
    		//空参
    	public Father(){
    		
    	}
    		//有参
    	public Father(String name,int age){
    		this.name = name;
    		this.age = age;
    	}
    	
    	//set&get方法
    	public void setName(String name){
    		this.name = name;
    	}
    	
    	public String getName(){
    		return name;
    	}
    	
    	public void setAge(int age){
    		this.age = age;
    	}
    	
    	public int getAge(){
    		return age;
    	}
    	
    }
    
    //子类
    class Son extends Father{
    	
    }
    
    //测试类
    public class test{
    	public static void main(String[] args){
    		//创建子类对象
    		Son s = new Son();
    		//用set方法赋值
    		s.setName("张三");
    		s.setAge(20);
    		//输出
    		System.out.println(s.getName+","+s.getAge);
    	}
    	
    }
    创建子类对象,调用空参构造,用set方法赋值,用get方法获值是完全没有问题的,因为子类继承父类的时候,若子类中没有任何成员时,子类只能通过无参构造对成员变量进行初始化,
    然后通过set方法赋值.(注意:这里子类在通过无参构造初始化之前会先默认调用父类的无参构造对父类成员进行初始化)

    但子类若想使用有参构造对成员变量进行初始化:

    //测试类
    public class test{
    	public static void main(String[] args){
    		//创建子类对象
    		Son s = new Son("张三",20);  //此处会显示错误
    		
    		System.out.println(s.getName+","+s.getAge);
    	}
    }

    上面通过Son s = new Son("张三",20);有参构造对子类成员进行初始化会出现编译错误,因为子类中没有定义有参构造,而且子类不会继承父类的有参构造.那如果我们想用有参构造
    该怎么办呢? 那我们只能在子类中手动写出有参构造:

    //子类
    	class Son{
    		public Son(){
    			//为了可以使用无参,我们把无参也写上
    		}
    		
    		public Son(String name,int age){
    			this.name = name;//会显示错误
    			this.age = age;//会显示错误
    		}
    	}
    	//测试类
    	class Test{
    		Son s = new Son("张三",20);
    		
    		System.out.println(s.getName+","+s.getAge);
    	}
    像上面这样写的话有会出现问题了,我们会发现'this.' 并不能对父类成员进行访问,因为父类成员变量是私有的,所以用set方法进行访问:

    //子类
    	class Son{
    		public Son(){
    			//为了可以使用无参,我们把无参也写上
    		}
    		
    		public Son(String name,int age){
    			this.setName = name;
    			this.setAge = age;
    			//也可以用super.setName  和 super.setAge 
    			//也可以用 super(name, age) 调用父类有参构造对父类成员进行初始化(建议)
    		}
    	}
    而如果父类中只有参构造而没有无参构造时,在子类中必须对父类的有参构造进行显式调用,因为子类成员初始化之前会对父类成员进行初始化. 也就是说,若子类构造第一行代码没有调用父类构造,也没有调用子类构造,则默认调用父类无参构造,但父类中若没有无参构造,那只能在子类中显式调用出来,不然,父类成员变量无法进行初始化,子类无法使用.


    展开全文
  • 如何调用构造方法

    千次阅读 2019-05-09 18:48:21
    调用构造方法通过constructor-arg标签设置构造方法参数的值1. 参数类型为基本数据类型或String类型2.参数类型为引用数据类型3.参数类型为数组类型4.List集合5.Set集合6.Map集合 一.自动创建对象 ①创建一个web工程...

    一.自动创建对象


    ①创建一个web工程,拷入以下五个jar包
    在这里插入图片描述
    ②为了规范代码使逻辑清晰按以下方式创建两个Class类以及一个Spring文件
    在这里插入图片描述
    ③在命名为Test的Class文件中输入以下代码,当第一行代码执行时,创建了一个容器
    调用第二行代码的时候将Student对象从容器中拿出来使用

    package com.jd.test;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.jd.vo.Student;
    
    public class Test {
    
    	public static void main(String[] args) {
    		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
    		Student student  = applicationContext.getBean(Student.class);
    		System.out.println(student);
    	}
    }
    

    ④由于并未设置懒加载,当③中容器创建的时候自动创建了一个Student对象

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    	<bean class="com.jd.vo.Student"></bean>
    </beans>
    

    ⑤在Test文件中运行,得下图(创建对象后会默认调用该Student类的无参构造方法,如果此时在Student类中定义了一个有参构造方法并且没有指定调用该有参构造方法则运行时会出错)
    在这里插入图片描述

    二.调用构造方法


    通过constructor-arg标签设置构造方法参数的值

    1. 参数类型为基本数据类型或String类型

    == 直接使用value标签属性赋值==
    ①Student类中

    public Student(String name,String age) {
    		System.out.println(name+":"+age);
    }
    

    ②application.xml中(constructor-arg标签的数和值对于调用构造方法的参数列表,若不对应则出错)

    <bean class="com.jd.vo.Student">
    		<constructor-arg name="name" value="Tom"></constructor-arg>
    		<constructor-arg name="age" value="12"></constructor-arg>
    </bean>
    

    2.参数类型为引用数据类型

    直接使用ref属性指定对象
    ①Student中

    public Student(Date day) {
    		System.out.println(day);
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"/>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="day" ref="date"></constructor-arg>
    </bean>
    

    3.参数类型为数组类型

    使用array子标签设置数组,通过array子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(int [] scores) {
    	for (int score : scores) {
    		System.out.println(score);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="scores">
    		<array>
    			<value>1</value>
    			<value>2</value>
    		</array>
    	</constructor-arg>
    </bean>
    

    4.List集合

    使用list标签赋值,通过list子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(List<String> names) {
    	for (String name : names) {
    		System.out.println(names);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="scores">
    		<array>
    			<value>1</value>
    			<value>2</value>
    		</array>
    	</constructor-arg>
    </bean>
    

    5.Set集合

    使用set标签赋值,通过set子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(Set<String> ids) {
    	for (String id : ids) {
    		System.out.println(id);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="ids">
    		<set>
    			<value>451564651</value>
    			<value>845151548</value>
    		</set>
    	</constructor-arg>
    </bean>
    

    如果数组、List、Set集合存储的是基本数据类型或String类型,则使用value,否则使用bean子标签或者ref子标签
    ①Student中

    public Student(List<Date> birthdays) {
    	for (Date birthday : birthdays) {
    		System.out.println(birthday);
    	}
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"></bean>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="birthdays">
    		<list>
    			<bean class="java.util.Date"></bean>
    			<ref bean="date"/>
    		</list>
    	</constructor-arg>
    </bean>
    

    6.Map集合

    使用set标签赋值,通过set子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(Map<String,Date> birthdays) {
    	Set<String> keys = birthdays.keySet();
    	for (String key : keys) {
    		Date birthday = birthdays.get(key);
    		System.out.println(birthday);
    	}
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"></bean>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="birthdays">
    		<map>
    			<entry key="爸爸" value-ref="date"></entry>
    			<entry key="妈妈" value-ref="date"></entry>
    		</map>
    	</constructor-arg>
    </bean>
    

    如果Map集合 key或value是是基本数据类型或String类型,则使用key或value标签属性value,否则使用key-ref或value-ref

    展开全文
  • ”对应的类型的实例对象,众所众知,创建对象,会调用构造方法,构造器可以有多个,默认构造方法,多参数构造方法等。 这里演示,通过反射创建默认构造方法的实例对象,和带参数的构造方法的实例对象。 案例实战...
  • C++对象数组调用构造/析构函数的方法

    千次阅读 多人点赞 2016-09-20 23:35:25
    C++的对象数组: 顾名思义,即是存储对象的数组。比如有一个对象student,实例化为对象数组...//第二种方法,在堆空间中分配空间对象数组调用构造函数:class student //定义一个student类,只有个构造函数当示例用 { pu
  • 1.构造方法为为了初始化对象中的属性和方法 2.子类继承父类的成员变量,所以要先调用fuqi父类的构造方法和属性。
  • 在Java中Object类是其他所有Java类的基类(直接或间接继承),在Object类...作为所有Java类的基类(Object自己除外),Object的构造方法是所有Java类创建对象时所必须调用的. 在Java中,创建子类对象时,因为可能会用到父类的
  • Android-构造方法-对象创建

    千次阅读 2019-02-15 13:44:57
    构造方法是一种特殊方法,...对象创建就是通过构造方法来完成的,其功能主要是完成对象的初始化 注意: 1.如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认 的构造方法是无参数的,且方法体中没...
  • 如下: ``` var o1 = { name : 'programmer', age : 25 ...如果字面量方式的创建没有调用Object构造函数,那么它创建对象的原理是什么? 另外,“表达式上下文”即expression context是什么意思?
  • 首先我们要知道构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用 子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的...
  • Java 调用构造一定产生新对象

    千次阅读 2015-12-16 18:11:46
    言归正传,最近对一个问题有点疑惑,就是调用构造器会不会一定产生新对象,如果一定会,那么一个子类实例化,会调用所有父类构造器,而每个类都是Object的子类,这样堆里面就会有大量的Object类,这样的设计显然是不...
  • C# 反射详解 定义 动态创建对象调用实例方法 1、反射的定义及功能介绍:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个...
  • 1、子类在创建实例后,类初始化方法会...这个地方我说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" "方法(红色部分为方法名),初始化方法是由java源程
  • java基础-反射3(反射,反射创建对象,操作对象属性,调用对象方法)前面通过学习,我们了解的运行时类型信息的基本原理,以及通过Class对象和反射来获取运行时类型信息。下面来了解通过反射来创建对象,以及操作...
  • 转载请注明出处:http://blog.csdn.net/xyang81/article/details/44002089在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但...
  • 之前我们写cglib动态代理的时候 创建代理对象时都是调用被代理对象的无惨构造 private Object targetObject; public Object CreateProxy(Object targetObject){ this.targetObject = targetObject; Enhancer ...
  • 1、子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang....这个地方我说的是初始化方法,而不是构造方法,因
  • Java反射获取构造器   获取某一个类中的所有构造器: 1. 明确操作的是哪一个类(严格的说是类编译后的字节码) 2. 获取构造器 Constructor类:表示类中构造器的类型,Constructor实例表示的就是某一个类中的...
  • 构造方法: 一种特殊的,与类同名的方法,专门用于创建对象,完成对象的初始化。 构造方法的名与类名相同; 构造方法没有返回类型,也不能写void; 构造方法主要是完成对象的初始化工作; 构造方法一般不能像...
  • 构造函数与创建对象

    千次阅读 2016-03-27 00:45:30
    首先思考几个问题:在JAVA中:一、生成一个对象一定调用构造函数?调用构造函数是否一定会产生对象?二、创建子类对象的同时到底有没有创建父类对象啊?下面提供几种说法,不确保正确性。 说法: 一、 1、对象...
  • 在Kotlin中,init代码块的到底是什么时候执行的呢,和构造方法以及伴生对象一起使用时顺序又是怎样的呢?下面我们来详细看一下
  • 如题:new 一个没有构造方法的子类,会调用父类的无参构造方法。如下面的两个类:
  • Java继承关系下的构造方法调用

    千次阅读 2015-03-19 16:24:47
    在Java中创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,然后再调用子类的构造方法。本文描述子类中如何调用父类的构造方法
  • 无参构造方法和有参构造方法调用
  • JAVA面向对象构造方法

    千次阅读 2015-12-22 21:39:51
    语句来创建一个对象,new可以理解成创建一个对象的关键字,通过new关键字为对象分配内存,初始化实例变量,并调用构造方法。Box()在形式上和调用方法的形式相同,这个Box()就是一个特殊的方法叫构造方法。但是我们在...
  • Python创建对象:对象名称=类() class Point: pass p1 = Point() p2 = Point() 在创建对象时,Python解释器会自动执行以下操作: 1.创建对象----为对象在内存中分配空间; 2.初始化方法(init)—为对象的属性设置...
  • 先说构造方法,在使用Class类中的,newInstance() 取得实例化对象时,会出现一些问题。看下面出错的代码:package com.jmd.bingo; class Person { private String name; private int age; // public Person() { //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 945,463
精华内容 378,185
关键字:

创建对象一定调用构造方法吗