① java 构造方法 函数
java的构造函数其实很简单。
一个类 被实例化 也就是被new的时候 最先执行的是 构造函数,如果你有留心。你会发现很多类里面根本没有写构造函数。
在java类中,如果不显示声明构造函数,JVM 会给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。
比如一个实体类
public class entity{
private int id;
private String userName;
get...set..方法
}
如果这样写该类就是默认的构造函数。该类实例化的时候 id 和 username 就是默认值 即 id=0,username=null.
如果在里面加入这样一个方法
public entity(int id,String userName){
调用get..set..
}
如果这样写 该类实例化的时候 必须给出 id 和username参数。 JVM不会再给这个类默认构造函数
你也可以理解成 在没有给构造函数的时候 JVM 给你的类加了一个这样的函数
public entity(){
this.id=0;
this.userName=null;
}
其实构造函数是用来对一个类以及变量进行实例化。
② java构造方法
在类里如果定义一个或多个构造方法,java不提供默认的构造方法,所以要加一个不带参数的构造方法,可以试着把无参构造方法的删了,然后从那new一个对象
③ 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中的构造方法
构造方法作用就是对类进行初始化。
如果你没有定议任何构造方法的形式,程式会为你取一个不带任何参数的构造函数,那么你产生类的对像时只能用不带参数的方法,如:class
a
{}//没有任何构造函数。
构造方法就是与类同名的那个方法,它的作用是可以用来初始化,例子如下class
Person
//人类{public
Person(String
n,int
a)
//构造方法
{ name
=
n;
age
=
a;} private
string
name; private
int
age;}static
void
main(String[]
args){Person
p
=
new
Person("张三",14);//这就是作用}new一个对象的时候要用到构造函数,例如Hello
hello
=
new
Hello();这时调用的是Hello的无参数构造方法;Hello
hello
=
new
Hello("hi");这个是调用Hello有参数构造方法,在JAVA中如果不写构造方法的话,会默认加上一个无参数的构造方法,但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上.如果Hello类中已经有了一个有参数的构造方法,这时再使用
Hello
hello
=
new
Hello();来创建对象的时候就会出错,这就是为什么书上要强调写了有参数的构造方法就最好加一个无参数的构造方法.
⑤ 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();合法。
⑧ Java构造方法
package entity;
public class Person {
private String name;
private String sex;
private Integer age;
/**
* 无参数构造方法
*/
public Person() {
}
/**
* 带参数的构造方法
* @param name
* @param sex
* @param age
*/
public Person(String name, String sex, Integer age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
/**
* 输出详细信息
* @return
*/
public String output() {
return "Person [name=" + getName() + ", sex=" + getSex() + ", age=" + getAge() + "]";
}
/**
* 测试方法
*/
public static void main(String[] args) {
Person person = new Person("网络知道","保密",18);
System.out.println(person.output());
}
}
⑨ Java代码,构造方法
//Circle类
public class Circle{
double radius=1;
final double PI=3.14;
//无参数构造函数
public Circle(){
this.radius=1;
}
//获取面积
public double getArea(){
double area;
if(radius>0){
area=PI* Math.pow(radius,2);
}
return area;
}
//获取周长
public double getPerimeter(){
double perimeter;
if(radius>0){
perimeter=2*PI* radius;
}
return perimeter;
}
}
⑩ 什么叫做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)
它的意思是递归的构造方法调用,大家遇到这个问题的时候,稍微检查下自己的代码,看看构造方法是否出现递归调用了。