-
2021-03-06 18:02:48
构造函数总结
概念: 创建对象时由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入门——构造函数赋值问题
2019-10-14 00:48:00直接赋值 public class student { String name; // 不能有private int age; student(){} // 不可缺少 student(String name,int age){ this.n...- 直接赋值
public class student { String name; // 不能有private int age; student(){} // 不可缺少 student(String name,int age){ this.name =name; // 可有可无 this.age = age; } // 无get()set() public void show() { System.out.println("学生爱学习"); } }
- 利用set()赋值,get()接收
public class Teacher { private String name; // private可有可无 private int age; public Teacher(){} // 必有空参,不可缺少 public Teacher(String name,int age){ this.name = name; // 可有可无 this.age = age; } // 用set赋值 必有get()set() public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void show(){ System.out.println("老师爱讲课"); } }
- 构造函数赋值
public class xiaozhang { private String name; // 可有可无 private int age; public xiaozhang() { } // 必有空参,不可缺少 public xiaozhang(String name, int age) { this.name = name; // 必有this.变量 this.age = age; System.out.println(name); // 若无set()get(),则必有输出sout System.out.println(age); // 若有set get,则test中必有System.out.println(xz.getName()); System.out.println("校长爱转圈"); } } /* public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age;*/
- 测试类test
public class practice { public static void main(String[] args) { // 直接赋值,不能有private student stu = new student(); stu.name = "小明"; stu.age = 15; System.out.println(stu.name); System.out.println(stu.age); stu.show(); // 对象名调用函数 System.out.println("————————"); //用set() get()赋值 Teacher t = new Teacher(); t.setName("李老师"); t.setAge(45); System.out.println(t.getName()); // 用set赋值用get接收 System.out.println(t.getAge()); t.show(); System.out.println("————————"); //用构造函数赋值 xiaozhang xz = new xiaozhang("张校长",60); //System.out.println(xz.getName()); //System.out.println(xz.getAge()); } }
-
详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现
2021-01-01 04:58:33C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它... -
Java 基础(构造器,属性赋值先后顺序)
2021-02-12 21:00:47构造器构造器的作用:创建对象初始化对象的属性说明:如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器定义构造器的格式: 权限修饰符 类名(行参列表){}一个类中定义的多个构造器,彼此构成重载一旦...构造器
构造器的作用:
创建对象
初始化对象的属性
说明:
如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
定义构造器的格式: 权限修饰符 类名(行参列表){}
一个类中定义的多个构造器,彼此构成重载
一旦我们显示的定义了类的构造器之后,系统就不再提供默认的空参构造器
一个类中,至少会有一个构造器
构造器的特征:
它具有与类相同的名称
它不声明返回值类型。(与声明为void不同)
不能被 static、final、synchronized、abstract、native修饰,不能有return语句返回值
public class PersonTest {
public static void main(String[] args) {
// 创建构造器对象:new + 构造器
Person p = new Person();
p.eat();
Person p1 = new Person("Tom");
System.out.println(p1.name);
}
}
class Person{
//属性
String name;
int age;
//构造器
public Person() {
System.out.println("Person()........");
}
public Person(String n) {
name = n;
}
public Person(String n, int a) {
name = n;
age = a;
}
public void eat() {
System.out.println("人吃饭");
}
public void study() {
System.out.println("人可以学习");
}
}
运行结果:
属性赋值先后顺序
默认初始化
显式初始化
构造器中赋值
通过 "对象.方法" 或 "对象.属性" 的方式赋值
public class UserTest {
public static void main(String[] args) {
User u = new User();
System.out.println(u.age); // 1
User u1 = new User(2);
System.out.println(u1.age); // 2
User u2 = new User(2);
u2.setAge(3);
System.out.println(u2.age); // 3
}
}
class User{
String name;
int age = 1;
public User() {
}
public User(int a) {
age = a;
}
public void setAge(int a) {
age = a;
}
}
-
Java静态成员变量将在构造函数调用完毕后,才赋值
2021-08-19 21:20:16首先默认的午餐构造函数会调用父类的无参构造函数; 在父类的无参构造方法中,调用后为成员变量初始化,Person的name从null变为Person,最后调用sayName方法; 由于子类自己已经复写了这个方法,那么就调用子类的...做题遇到这样一个题:
class Person { public String name = "Person"; public Person() { sayName(); } public void sayName() { System.out.println(name); } } class Student extends Person { public String name = "Student"; public void sayName() { System.out.println(name); } } class aaa { public static void main(String[] args) { new Student(); } }
以为会调用自己的
sayName
,从而输出Student
,实际上输出null
。首先默认的午餐构造函数会调用父类的无参构造函数;
在父类的无参构造方法中,调用后为成员变量初始化,Person
的name
从null
变为Person
,最后调用sayName
方法;
由于子类自己已经复写了这个方法,那么就调用子类的自己的这个方法;
但是此时子类还没有对自己的name
字段进行初始化,故而输出的为null
;
调用完毕后,子类的name
字段初始化为Student
。因为调用是从子类的构造->父类的构造,由父类的构造去调用子类的重写方法,那么调用的时候子类还没来得及对其成员变量
name
进行初始化并赋予初值。 -
不同Java泛型构造函数的详解
2020-08-25 22:48:03主要介绍了不同Java泛型构造函数的详解,因为对象是应用类型,对象赋值是指向同一个对象,所以如果需要保存对象某个时刻的状态,就需要构造函数来new一个新的对象。下面我们来详细了解一下吧 -
新手 java 在构造函数中给类中的变量赋值问题
2017-04-05 07:56:00package complex_number; import java.util.*;.../*构造函数,ComplexNumber,将实部和虚部置0*/ public ComplexNumber(){ m_dRealPart=0; m_dImaginPart=0; } 请问在构造函数的时候为什么会错? -
java构造函数怎么写
2021-03-01 07:47:12java构造函数怎么写发布时间:2020-06-29 11:50:19来源:亿速云阅读:114作者:Leahjava构造函数怎么写?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易... -
Java的构造函数与默认构造函数(深入版)
2021-02-25 19:34:33(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)构造函数与默认构造函数构造函数构造函数,主要是用来在创建对象时初始化对象,一般会跟new运算符一起使用,给对象成员变量赋初值。cl... -
java里直接赋值和构造方法赋值有什么不同
2017-05-17 11:26:19这类构造方法有什么用: { this.x=x; this.y=y; } -
Java构造函数中调用构造函数
2019-07-22 23:44:39在Java中,当为一个类创建了多个构造函数时,有时想在一个构造函数中调用另一个构造函数以减少代码量。这时可以使用this关键字来实现。通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它自身... -
构造函数属性赋值不用this案例
2021-03-17 12:57:08 -
JAVA 构造函数及其重载
2019-04-13 23:34:31以上给出了不同构造函数的重载,不同构造的同一个类的实例化对象,在实例化对象时系统就会自动调用构造函数,给相应得值进行初始化赋值;不同的构造进行不同得初始化,不同的赋值 5、如果类中没有定义构造函数,... -
C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
2020-08-24 00:40:09构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景 #include using namespace std; class ConstructTest{ public: ConstructTest(){ cout; dim_=0; base_= nullptr; }; ~ConstructTest... -
Java中成员变量赋值和构造函数谁先执行? 总结java的类在jvm生成的顺序
2021-02-28 18:47:43//父类class Fu{//父类构造方法Fu(){this.getNum();}public void getNum(){System.out.println("sdasdads");}}//子类class Zi extends Fu{private int num=4;...//结果0System.out.println("子类构造函数中"+thi... -
JAVA构造函数没有返回值是怎么赋值的?
2020-10-22 09:26:15众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。 可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一... -
java的构造函数可以重载吗?java构造函数重载例子
2021-02-12 11:24:31小伙伴们知道构造函数吧,那你们知道构造函数是否能重载吗?这次让我们来详细了解一下构造函数和重载吧。------------------构造---------------------什么是构造方法:1、是个方法2、在创建对象时,由new这个关键字... -
Java中构造函数的作用(转)
2021-02-12 15:11:02https://blog.csdn.net/vipmao/article/details/51530954,我觉得讲的非常好,学习到了构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。... -
JAVA-初步认识-第七章-构造函数重载
2021-03-01 08:44:29题目为构造函数重载,可以想到之前一般函数的重载,概念之间总是相互联系的。某一个事物是什么,有什么特点介绍完了之后,下面就是怎么用(初始化),什么时候用?二.什么时候定义构造函数呢?在描述事物时,该事物一... -
Java 构造函数的详解
2016-07-14 14:54:44那么我们在java里面怎么在对象一旦创建就赋值呢? 1.构造方法的作用: 构造方法作用:对对象进行初始化. 如图: 2.构造函数与普通函数的区别: (1). 一般函数是用于定义对象应该具备的功能。... -
Java 8 lambda 方法/构造函数引用
2020-11-21 17:57:38方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们似乎更...之后(使用方法引用和java.util.Comparator.comparing): inventory.sort(comparing(Apple::g. -
父类成员在子类构造函数中赋值方法——子类显示调用父类带参构造函数
2020-10-28 18:02:33Applicatorvacuum::Applicatorvacuum(EVENT_ID_E targetAddr):ApplicatorBase(targetAddr)//子类显示调用父类的带参构造函数 { } Applicatorvacuum::~Applicatorvacuum() { } 子类创建对象 ApplicatorBase *appBase... -
通过构造器为bean属性赋值(有参数的构造函数赋值)
2020-07-31 18:59:35快捷写出有参无参构造函数:右键代码空白处 spring这个eclipse改代码后要ctrl s刷新错误才会消失 javaclass public person01(String lastname, int aage, String email) { super(); this.lastname = lastname; ... -
java中的构造函数
2020-12-06 20:11:28构造函数也称构造方法,是java中的一种特殊的函数 2.作用于特点 作用:创建新对象时给对象初始化 特点:函数名与类名相同,没有返回值,不可以写return,可以有多个构造函数(参数列表不同),各个构造函数之间属于... -
JAVA基础——构造函数方法总结(有参构造和无参构造)
2021-03-01 07:17:05使用构造器时需要记住:1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)2.每个类可以有一个以上的构造器3.构造器可以有0个、1个或1个以上的参数4.构造器没有返回值5.构造器总是伴随着... -
Java 带参数的构造函数
2021-03-01 07:17:50Java 带参数的构造函数接下来,我们准备为大家介绍“带参数的构造函数”。那么,我们为什么要使用带有参数的构造函数呢?首先,我们可以举一个例子,例如:在一个游戏里面,假设它有多个不同类型的角色,而不同的... -
JAVA中构造函数以及this的使用(内存的图解)
2019-09-26 21:32:10构造函数就是在我们定义一个类似时就已经默认存在的. 例如: class Perso{ private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 public void speak() { System.out.println(name+...