Java day5 私有变量,代码块,this关键字 2019.7.12

  • 私有成员变量
  • 构造函数
  • 构造代码块
  • 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);
	}
}

你可能感兴趣的:(Java)