匿名对象 构造方法 重载 构造代码块 this 关键字

一.匿名对象

1.匿名对象 :没有名字对象

2.匿名对象的使用注意点:

     1.我们一般不会用匿名对象给属性赋值,无法获取属性值。

     2.匿名对象永远都不可能事一个对象。

3.匿名对象的好处 : 书写简单。

4.匿名对象的使用场景 :

     1.如果一个对象需要调用一个方法一次的时候,就可以用匿名对象来调用。

     2.可以作为实际参数在方法中调用。

二.构造方法

1.构造方法:在java中类似OC中的初始化方法

2.OC初始化方法的特点 :

      1.可以在对象创建时初始化属性值。

      2.初始化方法只能被调用一次。

3.构造方法的作用 :给对应的对象进行初始化,对象创建时初始化属性值。

4.如何来创建构造方法:

   格式 :

      修饰符 类名(参数列表){}

5.构造方法使用注意点:

      1.方法名和类名保持一致

      2.构造方法没有返回值的。

      3.构造方法不是由我们手动调用的,而是在对象被创建时由java虚拟机调用的。

      4.如果一个类我们没有给他定义构造方法,jvm在编译的时候会给这个类默认添加一个无参的构造方法。

      5.如果你自己定义构造方法,jvm就不会在创建无参的构造方法。这个时候需要自己定义一个无参的构造方法。

6.构造方法中是可以调用普通方法的

      在同一个类中,方法的调用直接拿到方法名调用就可以了。

7.构造方法中是可以调用普通(实例)方法。

8.构造方法中是否可以调用构造方法?

可以的

9.构造方法中如何调用的?

this(参数);

10.使用注意点 :

      1.this调用构造方法,必须是构造方法中的第一个语句。

      2.不要相互调用构造方法。

class Person
{
	//公有的属性
	String name;
	int    age;

	//创建一个构造方法
	public Person(String n,int a){
		
		//给属性赋值
		name = n;
		age = a;
	}

	public Person (){
	
	}

	//行为 ,普通方法
	public void work(){
	
		System.out.println(name +"正在工作");
	}
}

class Demo1
{
	public static void main(String[] args) 
	{
		
		//创建一个Person对象,同时给属性赋值
		Person p = new Person("老王",38);
		
		//调用工作的方法
		p.work();
		//
		Person p1 = new Person();
		p1.name = "老宋";
		p1.work();
		
	}
}
//老王正在工作
//老宋正在工作

  

二.重载

1.重载:在java中方法是可以重名的,我们把这种重名的方法

2.方法重载的使用注意事项:

      1.必须是方法名一样,才可以叫方法重载

      2.任何方法都可以实现方法的重载。

      3.保证参数列表的参数的顺序或者个数不一样

class Baby
{
	
	//公有的属性
	String name;
	String sex;
	int age;
	
	{
		//调用小孩哭的方法
			cry();
	}

	//创键构造方法
	Baby(String n,String s,int a){ // 局部变量 :必须初始化
	
			//给属性赋值
			name = n;
			sex = s;
			age = a;

		
	}
	
	//参数的个数不一样。
	Baby(String n,String s){
		
		name = n;
		sex = s;

		
	}
	
	//和第一个对比参数的顺序不一样
	Baby(String s,int a,String n){
		name = n;
		sex = s;
		age = a;
		
	}


	//不带参数的构造方法
	Baby(){
		
		
	}

	

	//公有的行为
	public void cry(){
		
		System.out.println(name+"在哭1");
	}

	public void cry(String name){
	
		System.out.println(name+"在哭2");
	}

}

class  Demo1
{
	public static void main(String[] args) 
	{

		//创建一个baby类
		Baby b = new Baby("狗蛋","男",1);
		//小孩饿了
		b.cry();

		//狗蛋又有一个小弟弟
		Baby b1 = new Baby("二狗子","男");
		//哇哇地哭
		b1.cry();
	}
}
//null在哭1
//狗蛋在哭1
//null在哭1
//二狗子在哭1

 

  

 

三.构造代码块 

1.构造代码块的作用 : 给对象统一初始化。

2.构造代码块的格式 :

       {

    }

3.注意 :

      构造代码块必须是写在成员的位置上的

4.代码块 :

      1.构造代码块

      2.局部代码块  写在方法中 也是以大括号来表示。

      3.静态代码块  后面讲。

5.构造代码块的使用注意点 :

      1.java中编译器编译一个java源文件的时候,会把成员变量的声明放在类的最前面。

      2.成员变量的初始化都是在构造方法中执行的。

      3.一旦经过java编译器编译后,那么构造代码块中的代码会移到构造函数中执行

      4.成员变量的显示初始化和构造代码块,按照当前代码的顺序来执行的,谁在后面就显示谁。

 

class Person
{

	//公有的属性
	String name;
	String sex;
	int    age;

	// 问题 : 构造代码块在什么时候被执行。

	{
		System.out.println("我是代码块");
	}

	//公有的方法
	public void work(){
	
		System.out.println(name+"在工作");
	}
}

class Demo1
{
	public static void main(String[] args) 
	{
		
		Person p = new Person();

		Person p1 = new Person();

		Person p2 = new Person();
	}
}
//我是代码块
//我是代码块
//我是代码块

 

  

 

四.this 关键字

1.this : 代表所属方法的调用对象。和OC 中的self很象。

 

2.this关键字的作用 :

        1.如果成员变量和局部变量重名,在方法中时默认调用局部变量,通过this可以让方法调用成员变量。

3.this关键字的使用注意点 :

        1.存在域成员变量同名局部变量,方法内部会访问局部变量(java采用一个就近原则)

        2.在方法中不存在和成员变量同名的局部变量,java编译器在编译时会默认给变量前面加一个this.

 

class Person
{		
	//公共属性
	String name;
	
	//构造代码块
	

	//创建一个构造方法
	public Person (String name , int age){ //就近原则
		
		this.name = name; // 两个name都是指的时局部变量的name.
		this.age =age;    // 两个age都是指的时局部变量的age
		
	}

	int age = 20;

	{
		age = 18;
	}

	public void work(){

		//创建一个局部变量 变量名也叫name
		//String name = "老宋";
	
		System.out.println(name+"在工作");//null
	}
	



}

class Demo1
{
	public static void main(String[] args) 
	{

		Person p = new Person("老王",30);

		p.work();

		System.out.println(p.age); //打印老王的年龄 //老曹 :20  老肖:18 老陈:18 老王 :20 
	
	}
}
//老王在工作
//30

 

  

 

posted @ 2016-12-21 13:50  游家金  阅读(274)  评论(0编辑  收藏  举报