❶ 在Java中构造函数是什么
java构造函数,也叫构造方法,java类中的一种特殊方法,方法名与类名相同,一般用来初始化一些成员变量
当要生成一个类的对象(实例)的时候就会调用类的构造函数
如果不显示声明类的构造方法,java会自动生成一个默认的不带参数的空的构造函数
public class Test
{
public Test(){}//这里可以省略
public static void main(String[] args)
{
Test test = new Test();
}
}
如果显示声明了类的构造函数,java就不会再生成默认的构造函数
public class Test
{
String name;
public Test(String name)//用户自定义构造函数
{
this.name = name;
}
public static void main(String[] args)
{
Test test = new Test("zhangsan");
}
}
❷ java构造方法和默认构造方法
构造和默认构造这两个类本质上是一样的,当没有提供构造方法时,编译器会自动加上一个默认的不带参数的构造方法,就是下面2个类的例子。自己写上的话编译器就不加了,省略编译器就加上。classTest{
intn;
}
classTest{
intn;
Test(){
}
}
每个类都必须至少有一个构造方法,不写时便是上述原因编译器自动给加的,不是它没有构造方法。
而带参数的构造方法或者说参数化的构造方法,就是指构造方法的参数不是空的,比如:
classTest{
intn;
Test(intn){this.n=n;}
}
默认的是什么也不带的。
❸ 什么叫做JAVA的构造方法(含义)
在Java中,每个类都需要至少一个的构造方法(可以有多个),它用于构造类的对象;在Java中构造方法必须与类名相同;构造方法可以不带有参数、也可以带有参数,不带有参数的构造方法被称为无参构造(no-arg)方法。
这里大家可能会觉得奇怪,我们之前的MainClass好像就没有构造方法。其实是这样的,如果我们不给类提供构造方法,编译器会自动提供一个无参构造方法。
定义构造方法的语法如下:
Java代码
constructorName (listOfArguments) {
[constructor body]
}
其中constructorName必须和你定义的类的名字相同,listOfArgumengs是构造方法的参数列表,当然,这里也可以不带有任何参数。然后大括号内是我们的方法体。这里提一下,构造方法也可以带有访问控制符,即public、protected、private和default(忽略情况下)。
下面的例子给出了一个构造方法的实例:
Java代码
public class MainClass {
double radius;
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
}
可以看出,我们给MainClass定义了一个构造方法,它的修饰符是默认的。后面的教程大家会学到这几个访问控制符的作用。我们的MainClass的构造方法带有一个double参数,这里大家也可以看出,构造方法的参数可以用于初始化类的属性,其实强制要求带参数的构造方法可以保持类的状态的完整性,即保证构造出的对象是符合要求的。
默认构造方法
前面我讲过,如果没有提供构造方法,编译器会提供一个默认的构造方法(没有参数)。这里其实也隐含着一个意思,即,如果我们提供了构造方法,那么编译器是不会提供默认的构造方法的。我们可以通过下面的代码来验证。
Java代码
public class MainClass {
double radius;
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
public static void main(String[] args) {
MainClass mc = new MainClass();
}
}
大家可以尝试编译上面的代码,可以发现编译会出错,提示的错误信息为:
Java代码
The constructor MainClass() is undefined
这个信息的意思是构造方法MainClass()没有定义,即编译器没有给我们提供默认的构造方法。那么如果我们还想继续使用无参的构造方法的话,这就需要我们自己来提供了,如:
Java代码
public class MainClass {
double radius;
MainClass() {
}
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
}
上面的代码我们自己手动的提供了一个无参的构造方法MainClass(),大家现在尝试编译代码,会发现,代码是可以通过编译的。所以在自己实际的工作中,稍微注意这点。
多个构造方法
其实我们前面已经见过多构造方法的例子了,不过这里给大家提示下,Java支持一个类中定义多个构造方法,如:
Java代码
class Sphere {
int radius = 0;
Sphere() {
radius = 1;
}
Sphere(int radius) {
this.radius = radius;
}
}
这里我们定义了球(Sphere)类,然后定义了它的半径并提供了两个构造方法。在默认的构造方法里,我们将半径设置为1,然后在带有半径作为参数的构造方法中,我们设置了半径为提供的值。
在一个构造方法中调用另一个方法
我们一直称呼构造方法,那么既然是方法,当然支持方法的调用。在Java中,我们可以从一个构造方法中调用另一个构造方法。要调用另一个方法,只要使用this关键字,然后后面跟着括号,如果要调用的构造方法中带有参数,只要将参数放到对应的位置即可。如:
Java代码
class Sphere {
int radius = 0;
double xCenter;
double yCenter;
double zCenter;
Sphere() {
radius = 1;
}
Sphere(double x, double y, double z) {
this();
xCenter = x;
yCenter = y;
zCenter = z;
}
Sphere(int theRadius, double x, double y, double z) {
this(x, y, z);
radius = theRadius;
}
}
在使用这种方式的时候,稍微注意下,不要引起循环调用。在出现循环调用的时候,编译器会出现类似于如下的提示来阻止类编译通过:
Java代码
Recursive constructor invocation MainClass(int)
它的意思是递归的构造方法调用,大家遇到这个问题的时候,稍微检查下自己的代码,看看构造方法是否出现递归调用了。
❹ java中什么是构造方法,什么是成员方法怎么区分的
构造方法:没有返回值(连void也没有),与类名同名
成员方法:必须有返回值,空返回就是void
❺ JAVA中构造函数是什么意思
什么是构造函数,问的好。
开始的时候我也不理解为什么要构造函数。因为那时候的设计思想还停留在面向过程编程。即我要干什么事,这件事有几个步骤,然后我决定怎么干。
面向对象不是这么直接简单,它的设计思想就是要代码重用。即我以前干过类似的事,那么我找出以前可以用到的代码,完成一部分。以前没有的我重新写。这样就有了类。
回到你提的问题。有了类,就是有了可以重用的代码,但是我怎么产生这个对象呢。必须要实例化这个类(当然这不是唯一产生对象的途径,比如单例模式,但本质上说所有途径都是一样的)。那么就要用到构造函数。即告诉程序我现在要实例化一个对象了,你给我马上分配内存。将内存的首地址赋给我指定的类对象。而且有时候你需要传递参数到函数里面,有了构造函数就方便了,构造函数可以有无数个。当然,传递参数到到对象里面也可以其它方法,比如直接赋一个值给成员变量,举例:
class point2{
int x,y;
point2(){
}
point2(int a,int b){//构造函数;含参的构造函数;构造方法必须要和类名一致
//且没有返回值
x=a;
y=b;
}
void output(){
System.out.println(x);
System.out.println(y);
}
public static void main(String args[]){
point2 pt=new point2();//实例化对象,这时候x,y没有赋值,默认初始值为0;
pt.output();
pt.x=3;pt.y=3;
pt.output();
}
}
❻ 请问java中,构造方法是什么 能通俗的讲讲吗
首先要搞清楚什么是类方法,什么是构造方法
一个类中的方法分为三类:
1)全局方法 2) 成员方法 3)构造方法
例:
123456789101112public class Test{private int age; //这是成员变量public Test(int age){ //这是构造方法this.age = age;}public void setAge(int age){ //这是成员方法this.age = age;}public static int getAge(){ //这是全局方法,加了static ,成员方法就会变成全局方法return this.age;}}
成员方法和构造方法没啥关系,区别在于成员方法必须用类的实例化对象进行访问,而全局方法是用类直接访问的,而构造方法是实例化对象时进行初始化的
先解释构造方法:
Test t = new Test(34);
这里的new Test(34) 括号代表了构造方法,一般的构造的方法是默认的,可以不用写,如果上面的构造方法不写,这里就应该这样实例化对象:
Test t = new Test();
成员方法:
Test t = new Test(34);
t.setAge(35);
用实例化对象调用普通方法即可
普通成员变量:
Test t = new Test(34);
因为变量age加了private 不能这样调用:t.age = 35; 这样是错的,只能通过方法来进行修改
全局方法:
Test.getAge();
直接这样调用就可以了,当然如果没有实例化过,这里的Test.getAge()为0
❼ java中构造方法的理解
当你要是用这个类的时候,
a a1 = new a(str); //这就是你要用这个类的时候
分析:
类的初始化实例就是如上所示,这个时候就要了解实例化是实例化什么了。
实例化是运行这个类的构造函数
当一个类中没有构造函数的时候,编译器会默认给这个类加上一个空的构造函数。
如下
public a(){}
。当然,一个类也可以拥有多个构造函数。
如class a{
public a(String b){
System.out.println("abcd"); }
public a(String b,String b1){
System.out.println("abcd"); }}
类似于这样的。
你选择实例化哪个,编译器就编译哪个!!
以上是构造方法
那么String b是什么呢,那就是告诉那个构造函数,。只有String类型的参数 才可以是用这个构造函数。这个构造函数是不可以带其他类型的,。只能用这个String类型
system.out.println("abcd”);这个只是一个输出语句。。输出的结果就是abcd 没有其他的意思!
还有什么不懂的 QQ258276264问我,
呵呵
❽ java中什么是构造方法
构造方法,就是java类实例化的时候调用的类里面的一个方法来构造这个定义的实体。
在类中有不同的构造方法,通过传入参数来区分,选择不用构造方法来实例化这个实体
❾ JAVA 什么是构造方法
我来帮楼主下吧
先说一下语法。
构造函数,分为有参和无参
public class Student{
private String name;
private String password;
//无参
public Student(){
}
//有参
public Student(String name){
this.name=name;
}
}
为什么要有构造函数???
我先提一点。就是在我们没建构造函数的时候,会调用系统默认的无参构造函数。
构造函数的优点。
1.减少代码量。
2。减少错误匹配,增加限制
分别说上面两点
1.比如你如果没有构造函数,
需要
Student stu=new Student();
stu.setName("name");
stu.setPasswrod("01028");
相比
Student stu=new Student("name","010268");
哪个简单的?一比就出来了。特别是多个参数的时候
第2点。
比如我现在去掉无参的构造函数。
我的需求是没个学生创建对象的时候要有名字和密码。
Student stu=Student();//这个编译不过去。报错。
Student stu=Student("name","01026891");
是从严谨和安全的角度
补充。构造函数一般有很多的重载方法。方便用户使用。
再补充一点。如果你有手写构造函数,系统的无参构造函数将失效
❿ java类的构造方法是什么
构造方法和实例方法的区别
一、主要的区别在于三个方面:修饰符、返回值、命名
1、和实例方法一样,构造器可以有任何访问的修饰符,public、private、protected或者没有修饰符 ,都可以对构造方法进行修饰。不同于实例方法的是构造方法不能有任何非访问性质的修饰符修饰,例如static、final、synchronized、abstract等都不能修饰构造方法。
解释:构造方法用于初始化一个实例对象,所以static修饰是没有任何意义的;多个线程不会同时创建内存地址相同的同一个对象,所以synchronized修饰没有意义;
构造方法不能被子类继承,所以final和abstract修饰没有意义。
2、返回类型是非常重要的,实例方法可以返回任何类型的值或者是无返回值(void),而构造方法是没有返回类型的,void也不行。
3、至于命名就是构造方法与类名相同,当然了实例方法也可以与类名相同,但是习惯上我们为实例方法命名的时候通常是小写的,另一方面也是与构造方法区分开。
而构造方法与类名相同,所以首字母一般大写。
下面看几个例子熟悉一下:
publicclassSample{
privateintx;
publicSample(){//不带参数的构造方法
this(1);
}
publicSample(intx){//带参数的构造方法
this.x=x;
}
publicintSample(intx){//不是构造方法
returnx++;
}
}
上面的例子即使不通过注释我们也很容易能区分开的,再看下面一个例子
publicclassMystery{
privateStrings;
publicvoidMystery(){//不是构造方法
s="constructor";
}
voidgo(){
System.out.println(s);
}
publicstaticvoidmain(String[]args){
Mysterym=newMystery();
m.go();
}
}
程序执行的结果为null,虽然说Mystery m = new Mystery();调用了Mystery 类的构造方法,但是public void Mystery()并不是构造方法,他只是一个普通的实例方法而已,那该类的构造方法哪去了呢?
二、说到这就得说一下java的默认构造方法
我们知道,java语言中规定每个类至少要有一个构造方法,为了保证这一点,当用户没有给java类定义明确的构造方法的时候,java为我们提供了一个默认的构造方法,这个构造方法没有参数,修饰符是public并且方法体为空。如果用户有定义构造方法,就不会有默认构造方法!!!
其实默认的构造方法还分为两种,一种就是刚刚说过的隐藏的构造方法,另一种就是显示定义的默认构造方法.
如果一个类中定义了一个或者多个构造方法,并且每一个构造方法都是带有参数形式的,那么这个类就没有默认的构造方法,看下面的例子。
publicclassSample1{}
publicclassSample2{
publicSample2(inta){System.out.println("MyConstructor");}
}
publicclassSample3{
publicSample3(){System.out.println("MyDefaultConstructor");}
}
上面的三个类中Sample1有一个隐式的默认构造方法,下列语句Sample1 s1=new Sample()合法;
Sample2没有默认的构造方法,下列语句Sample2 s2=new Sample2()不合法,执行会编译错误
Sample3有一个显示的默认构造方法,所以以下语句Sample3 s3=new Sample3();合法。