package com.lbj.javase03;
/**
*
* @author 14811
* 关于java类中的构造方法:
* 1.构造方法又被称为构造函数/构造器/constructor
*
* 2.构造方法的语法结构:
* [修饰符列表] 构造方法名(形式参数列表){
* 构造方法体;
* }
*
* 3.回顾普通方法的语法结构:
* [修饰符列表] 返回值类型 方法名(形式参数列表){
* 方法体;
* }
*
* 4.对于构造方法来说,“返回值类型”不需要指定,并且也不能写void,
* 只要写上void,这个方法就变成了普通方法
*
* 5.对于构造方法来说,构造方法的方法名必须和类名保持一致
*
* 6.构造方法的作用:
* -构造方法的存在意义是,通过构造方法的调用,可以创建对象。
*
* 7.构造方法怎么调用:
* -普通方法是这样调用的:
* *方法修饰符中有static的时候:类名.方法名(实参列表);
* *方法修饰符中没有static的时候:引用.方法名(实参列表);
*
* -构造方法的调用:
* *new 构造方法名(实参列表);
*
* 8.为什么构造方法的返回值不用写:
* -因为它返回值永远是它自己,本身的类型
* User user=new User();
* 这个User就是赋值给自身类型的变量
* 每一个构造方法实际上执行结束后都有返回值,但是这个return 值; 规定不用写
* 构造java程序自动返回值
* 并且返回值类型是构造方法所在类的类型。
*
* 9.为什么我们之前new User();的时候明明没有看到User类里面有构造方法,却能够被调用:
*
* 当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为
* 缺省构造器
*
* *当一个类显式的将构造方法定义出来了,那么系统将不再默认为这个类提供缺省构造器。
* *建议开发中手动的为当前类提供无参数构造方法。因为无参构造方法在开发中使用的很多。
*
* 10.构造方法支持重载机制。在一个类中编写多个构造方法,这多个构造方法显然已经构成方法重载机制。
* 【这样的好处在于就好像在用同一个方法一样,不用记忆多个,只是参数数量和形式不一样而已】
*
* 11.开发的时候要用好注释
* /**
* *这里面注释的东西会形成帮助文档,只要鼠标移动到对应的方法名或者类名就会弹出你自己写的帮助文档
* */
public class ConstructorTest01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//调用同一个类内的static方法
ConstructorTest01.doSome();
//当然,调用static方法的时候也可以省略类名
doSome();
//调用无static方法的时候需要用引用调用
ConstructorTest01 t=new ConstructorTest01();
//一个类中没有任何构造方法的话,系统提供一个无参数的构造器
t.doOther();
}
public static void doSome(){
System.out.println("doSome");
}
public void doOther(){
System.out.println("doOther");
}
}
先定义一个账户类:
package com.lbj.javase03;
/**
* 这是一个账户类
* @author 14811
*
*/
public class Account {
//账号
private String actno;
//余额
private double balance;
//成员变量之实例变量,属于对象级别的变量,这种变量必须先有对象才能有实例变量
//实例变量没有手动赋值的时候,系统默认赋值,那么这个系统默认赋值是在什么时候完成的呢?
//是在类加载的时候吗?
//不是:因为类加载的时候只加载了代码片段,还没来得及创建对象。所以此时实例变量并没有初始化
//实际上,实例变量的内存空间是在构造方法的执行过程中完成开辟并初始化的
//系统在默认赋值的时候,也是在构造方法的执行过程中完成的赋值
//快捷键:在一个类中元素过多,想查看类体里面的所有内容属性ctrl+o
//然后输入要查找的元素名称,该名称不一定输入全名称
//无参数构造函数
public Account(){
//无参构造函数在这里的还有的作用是:初始化实例变量的内存空间
//相当于
//actno=null;
//balance=0.0;
}
//这些构造函数可以通过鼠标左键 source-->Generate Constructor using Fields自动生成
public Account(String a, double b) {
actno = a;
balance = b;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
再定义一个测试类:
package com.lbj.javase03;
/**
* 构造方法的作用:
* 1.创建对象
* 2.创建对象的同时,初始化实例变量的内存空间【给实例变量赋值】
* -因为之前还需要一个接着一个进行赋值,很麻烦
* -user.name="张三";
* @author 14811
*
*/
public class ConstructorTest02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
Account act1=new Account();
//按住ctrl,鼠标移动到Account上面并点击就知道程序在调用哪个方法
Account act2=new Account("123",10.3);
System.out.println(act2.getActno()+act2.getBalance());
}
}
补充,块编辑技巧: