重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
java的构造函数其实很简单。
龙潭ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
一个类 被实例化 也就是被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;
}
其实构造函数是用来对一个类以及变量进行实例化。
//Circle类
public class Circle{
double radius=1;
final double PI=3.14;
//无参数构造函数
public Circle(){
this.radius=1;
}
//获取面积
public double getArea(){
double area;
if(radius0){
area=PI* Math.pow(radius,2);
}
return area;
}
//获取周长
public double getPerimeter(){
double perimeter;
if(radius0){
perimeter=2*PI* radius;
}
return perimeter;
}
}
; 构造函数
构造函数是什么?
在堆内存中创建对象的时候 对象均需要初始化 初始化的动作就有构造函数来实现 事实上 每个类在创建对象且初始化的时候均调用了一个 隐式构造函数 用户在程序若重写声明构造函数则是 显式构造函数 JVM在执行的时候则以用户定义的构造函数为主
构造函数特点:
函数名必须与类名保持一致
没有类型定义 即是没有void int String 类类型等等数据类型的修饰
不可存在return语句
可以通过 方法重载 的方式来区别不同对象的初始化方式
比如Person类 对象的初始化就如 刚刚诞生的婴儿那般 有的婴儿出生前还没有取好名字 但出生后称了体重;有的出生前已经取好了名字 且出生后也称了体重 但是不管怎么样 婴儿都是哭着来到这个世界的 所以都共同拥有一个方法 cry()
class Person{ private String name; //姓名 private int weight; //出生体重 private int order; //编号 //不取名字 也不称重 Person(){ System out println( Order: + order + do nothing! ); cry(); } //取好名字未称体重 Person(int order String name){ System out println( Order: + order + Name is: + name); cry(); } //未取名字 但称体重 Person(int order int weight){ System out println( Order: + order + Weight is: + weight+ Kg ); cry(); } //取了名字 称了体重 Person(int order String name int weight){ System out println( Order: + order + Name is: + name + Weight is : + weight + Kg ); cry(); } //但是都是哭着来的 void cry(){ System out println( Crying when birth! ); } public static void main(String[] args){ Person child = new Person(); System out println( 华丽的分割线 ); Person child = new Person( Smith ); System out println( 华丽的分割线 ); Person child = new Person( ); System out println( 华丽的分割线 ); Person child = new Person( John ); } } /*运行结果如下: Order: do nothing! Crying when birth! 华丽的分割线 Order: Name is: Smith Crying when birth! 华丽的分割线 Order: Weight is: Kg Crying when birth! 华丽的分割线 Order: Name is: John Weight is : Kg Crying when birth! */
上面的代码 描述了构造函数的基本特点 一个空参数的构造函数 和 三个带有不同参数变量 的构造函数 在实例化对象的时候便有了不同的实现方式
构造函数出现的时机:
在定义类的时候 分析现实世界中具体事物的时候 若该事物存在或者具备一些特性或者行为 那就将这些内容定义到构造函数中 如例子中的婴儿 具有的特性就是体重等一些生理指标和名字标示符 行为动作就是出生后先哭
构造代码块
是将重载的构造函数中所具有的共同的功能或者特性再次抽取出来 放在一起执行
格式 在程序中写一对大括号 { } 即可 与构造函数具有同样的域范围即可 然后将共有的特性抽取到括号内 比如cry(); 注下面程序中红色部分
并且是先于构造函数执行的 可以参考下面代码执行的结果
如下面的代码
class Person{ private String name; //姓名 private int weight; //出生体重 private int order; //编号 //构造代码块 { cry(); } //不取名字 也不称重 Person(){ System out println( Order: + order + do nothing! ); } //取好名字未称体重 Person(int order String name){ System out println( Order: + order + Name is: + name); } //未取名字 但称体重 Person(int order int weight){ System out println( Order: + order + Weight is: + weight+ Kg ); } //取了名字 称了体重 Person(int order String name int weight){ System out println( Order: + order + Name is: + name + Weight is : + weight + Kg ); } //但是都是哭着来的 void cry(){ System out println( Crying when birth! ); } public static void main(String[] args){ Person child = new Person(); System out println( 华丽的分割线 ); Person child = new Person( Smith ); System out println( 华丽的分割线 ); Person child = new Person( ); System out println( 华丽的分割线 ); Person child = new Person( John ); } } /*执行结果如下: Crying when birth! Order: do nothing! 华丽的分割线 Crying when birth! Order: Name is: Smith 华丽的分割线 Crying when birth! Order: Weight is: Kg 华丽的分割线 Crying when birth! Order: Name is: John Weight is : Kg */ lishixinzhi/Article/program/Java/hx/201311/27044
JAVA的构造函数是:SetLocal EnableDelayedExpansion
set classpath=.
for %%c in (lib\*.jar) do set classpath=!classpath!;%%c
set classpath=%classpath%;./classes;
java com.ham.server.Server。
1、无参构造方法
无参构造方法又分为隐式无参构造方法和显示无参构造方法。
隐式无参构造方法
在定义类的时候,如果没有给类定义一个构造方法,Java编译器在编译时会默认提供一个隐式的构造方法,它没有任何参数,并且有一个空的方法体。例如,Person类中隐含一个无参构造方法,在main方法中可以通过new关键字来调用此默认的构造方法,代码如下:
2、显式无参构造方法
隐式无参构造方法是由系统提供的,无法修改其内容。但有时需要在调用这个构造方法时初始化类成员属性或执行一些操作,要实现这个需求,就需要为它定义一个显式无参构造方法,修改上述代码如下:
3、显示有参构造方法
构造并初始化对象是构造方法的作用,所以有时需要给这个方法传入一些参数,定义一个显示的有参构造方法。例如:
首先程序从MAIN入口开始运行,B
b=new
B();
这句。NEW是实例化的关键词,会调用构造函数:B(),但是JVM发现B有父类(A),那么先执行父类(A)的构造函数,就是A(),这些都是JVM执行类的顺序,是规则,接着看父类构造函数里面的内容,调用了INIT(),这里又有一个规则,当子类(B)覆盖了父类的方法,那么就调用子类的方法,所以执行了B类里面的INIT(),最后完成B的实例化(实例化就是调构造函数),调用B()。
再简单解释一下覆盖的概念:与父类的方法名一样,并且方法的参数列表也一样,方法的访问权限大于等于父类被覆盖的方法的权限。
希望能对你有帮助~