构造方法
构造方法属于类的特殊方法,例如(Student s1 = new Student()),声明Student类对象s1的同时调用Student类的构造方法Student(),并实例化一个Student对象。
定义构造方法
class 类名{
访问权限 类名(形参列表){
//方法体;
//构造方法没有返回值
}
}
class Student1 {
String name;
String sex;
public Student1(){//构造方法
System.out.println("演示");
}
public Student1(String aname,String asex){//构造方法
name = aname;
sex = asex;
}
构造方法的特殊性
1.构造方法名与类名相同
package pulank.tesila.kelayi;
//方法名
class Student2 {
String name;
int age;
//构造名
Student2(){
System.out.println();
}
//构造名
Student2(String aname,int aage){
name = aname;
age = aage;
}
}
2.不能为构造方法指定类型,也不能用return语句返回值,构造方法有隐含的返回值,该值由系统内部使用,我们不用管他
如果我们指定类型,会报错,显示无法将构造方法应用给指定方法
如果我们使用return语句,会显示不兼容类型,出现意外的值,当然也是报错
3.可以重载构造方法,即能定义多个有不同参数列表的构造方法
package pulank.tesila.kelayi;
//方法名
class Student2 {
String name;
String sex;
int age;
//重载方法
Student2(String sex){
sex = asex;
}
Student2(String aname,int aage){
name = aname;
age = aage;
}
}
4.在使用构造方法时,使用new关键字创建对象时,JVM为新建对象在堆内存开辟空间后,JVM将自动调用构造方法初始化新对象,在java中,通过“new 构造方法名(实参列表);”的形式调用构造方法,而不能直接用“构造方法名(实参列表);”调用构造方法
Student2 s1 = new Student2("nan");
Student2 s2 = new Student2("zhangsan",18);
5.如果自定义类中为定义构造方法,系统将为这个类提供一个默认的空构造方法,默认的空构造方法没有参数,方法体中也没有语句
//空方法
Student2 (){
}
6.如果自定义类中定义了任何构造方法,系统将不再提供空构造方法
使用构造方法
package pulank.tesila.kelayi;
class Student1 {
String name;
String sex;
int age;
Student1(){
System.out.println("演示");
}
Student1(String aname,String asex,int aage){
name = aname;
sex = asex;
age = aage;
}
Student1(String aname,String asex){
name = aname;
sex = asex;
}
public void getStudent1(){
System.out.println("姓名:"+this.name+"\t"+"性别:"+this.sex);
}
public void getStudent2(){
System.out.println("姓名:"+this.name+"\t"+"性别:"+this.sex+"\t"+"年龄:"+this.age);
}
public static void main(String[] args) {
Student1 s1 = new Student1();
Student1 s2 = new Student1("wangwu","nan",18);
Student1 s3 = new Student1("lisi","nan");
s1.name = "zhangsan";
s1.sex = "nan";
s1.getStudent1();
s2.getStudent2();
s3.getStudent1();
}
}
输出结果为:
this关键字
this关键字的作用
1.引用类中的数据成员
this.数据成员名;
package pulank.tesila.kelayi;
public class Student2 {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
2.引用类中的成员方法
this.成员方法名(实参列表);
private String getStudent(){
return "姓名:"+this.name+",年龄:"+this.age;
}
private int getyear(){
int year = Calendar.getInstance().get(Calendar.YEAR)-this.age;
return year;
}
3.调用本类的构造方法
this(参数列表);
public void display(){
System.out.println(this.getStudent()+"出生于"+this.getyear()+"年");
}
4.表示当前对象
package pulank.tesila.kelayi;
import java.util.Calendar;
public class Student2 {
//私有化数据成员
private String name;
private int age;
//构造方法
public Student2() {//空构造方法,标配
}
public Student2(String name,int age) {
this.name = name;
this.age = age;
}
//私有成员方法
private String getStudent(){
return "姓名:"+this.name+",年龄:"+this.age;
}
private int getyear(){
int year = Calendar.getInstance().get(Calendar.YEAR)-this.age;
return year;
}
//调用私有成员方法
public void display(){
System.out.println(this.getStudent()+"出生于"+this.getyear()+"年");
}
public static void main(String[] args) {
Student2 s1 = new Student2();
s1.name = "张三";
s1.age = 18;
Student2 s2 = new Student2("李四",17);
s1.display();
s2.display();
}
}
输出结果为:
Calendar.getInstance()方法,不仅能获取当前的时间,还能指定需要获取的时间点,
package pulank.tesila.kelayi;
import java.util.Calendar;
public class Student3 {
public static void main(String[] args) {
int s1 = Calendar.getInstance().get(Calendar.YEAR);
System.out.println(s1);
}
}