- 私有成员变量
- 构造函数
- 构造代码块
- this关键字
- 构造函数间的相互调用
私有成员变量
class Person
{
private int age;//一个私有成员变量一般对应两种方法:设置值和返回值
//提供对外访问方式,可以在访问方式中加入逻辑判断,增强代码的健壮性
public void setAge(int a)//私有变量外部无法访问
{
if(a>0&&a<130)
{
age=a;
speak();
}
else
System.out.println("illegal age");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person a=new Person();
//a.age=20;
a.setAge(-20);
}
}
构造函数`
class Person
{
private int age;
private String name;
Person()//构造函数与类名保持一致
{//作用就是给成员变量赋值
System.out.println("A:name="+name+" age="+age);
cry();
}
//构造函数还可以和重载函数结合使用
Person(String chs)
{
name=chs;
System.out.println("B:name="+name+" age="+age);
cry();
}
Person(String chs,int a)
{
name=chs;
age=a;
System.out.println("C:name="+name+" age="+age);
cry();
}
void cry()
{
System.out.println("cry..........");
}
}
//小细节,若果你不定义构造函数,系统会默认给你建造一个空参数的构造函数Person(){}
//如果你自己创建了就用你的
class PersonDemo2
{
public static void main(String[] args)
{
Person a=new Person();//构造后自动执行构造函数
Person b=new Person("zhangsan");
Person c=new Person("lisi",1);
}
}
构造代码块
/*
构造代码块
作用,给对象进行初始化
对象一建立就运行,而且优先于构造函数
和构造函数的区别:
构造函数是给对应的对象初始化
而代码块是给所有的对象初始化
*/
class Person
{
private int age;
private String name;
//构造代码块,所以所以对象都会哭就直接调用代码块
{
cry();
}
Person()//构造函数与类名保持一致
{//作用就是给成员变量赋值
System.out.println("A:name="+name+" age="+age);
//cry();
}
//构造函数还可以和重载函数结合使用
Person(String chs)
{
name=chs;
System.out.println("B:name="+name+" age="+age);
//cry();
}
Person(String chs,int a)
{
name=chs;
age=a;
System.out.println("C:name="+name+" age="+age);
//cry();
}
void cry()
{
System.out.println("cry..........");
}
}
//小细节,若果你不定义构造函数,系统会默认给你建造一个空参数的构造函数Person(){}
//如果你自己创建了就用你的
class PersonDemo3
{
public static void main(String[] args)
{
Person a=new Person();//构造后自动执行构造函数
Person b=new Person("zhangsan");
Person c=new Person("lisi",1);
}
}
this关键字
/*
this关键字:代表他所在函数所属对象的引用,为了形参具有阅读下=性
*/
class Person
{
private int age;
private String name;
//构造代码块,所以所以对象都会哭就直接调用代码块
{
cry();
}
Person()//构造函数与类名保持一致
{//作用就是给成员变量赋值
System.out.println("A:name="+name+" age="+age);
//cry();
}
//构造函数还可以和重载函数结合使用
Person(String name)
{
this.name=name;
System.out.println("B:name="+name+" age="+age);
//cry();
}
Person(String name,int num)
{
this.name=name;
this.age=num;
System.out.println("C:name="+name+" age="+age);
//cry();
}
void cry()
{
System.out.println("cry..........");
}
}
//小细节,若果你不定义构造函数,系统会默认给你建造一个空参数的构造函数Person(){}
//如果你自己创建了就用你的
class PersonDemo4
{
public static void main(String[] args)
{
Person a=new Person();//构造后自动执行构造函数
Person b=new Person("zhangsan");
Person c=new Person("lisi",1);
}
}
构造函数间的相互调用
/*
构造函数之间的调用也是使用this关键字,且必须放在第一条语句执行
防止最初的初始化覆盖了自己想要的初始化
*/
class Person
{
private int age;
private String name;
//构造代码块,所以所以对象都会哭就直接调用代码块
{
cry();
}
Person()//构造函数与类名保持一致
{//作用就是给成员变量赋值
this("aha");
System.out.println("A:name="+name+" age="+age);
}
//构造函数还可以和重载函数结合使用
Person(String name)
{
this("yiya",10);//必须放在第一条
this.name=name;
System.out.println("B:name="+name+" age="+age);
}
Person(String name,int num)
{
this.name=name;
this.age=num;
System.out.println("C:name="+name+" age="+age);
}
void cry()
{
System.out.println("cry..........");
}
}
class PersonDemo5
{
public static void main(String[] args)
{
Person a=new Person();//构造后自动执行构造函数
//Person b=new Person("zhangsan");
//Person c=new Person("lisi",1);
}
}