面向对象总结-02-----黑马程序员


 

ASP.Net+Android+IOS开发------期待与您交流

 

<面向对象及总结-02>

  (构造方法  构造代码块 静态static--的使用方法)

1. 构造方法

  * 就具有重载特性,通过参数列表来进行区分和调用了

  * this()语句,在构造方法之间的调用效果

  * 错误: 递归构造器调用,构造方法,是不允许递归调用,就是方法自己调用自己

  * this()语句,必须放在构造方法的第一行

2. 构造代码块

  * 构造代码块,写在函数中,节约内存而已

  * 构造代码块,写在类中 ***** 面试

     * 优先于构造方法运行

     * 建立对象,构造代码块就会先运行了

构造代码块在堆栈中的表现形式

3. 静态的由来  *****重点的掌握

  * 给对象提供共享的数据

  * 被static修饰的成员变量,变成所有对象的共享数据

  * 被static修饰的成员变量,多了一种调用方式,类名.变量名

  * 当数据被所有对象共享的时候,变量修饰为静态

  * 如果数据是对像特有的话,不能使用静态修饰

  * 静态修饰的成员变量,可以被类名调用,被对象调用

  * 非静态成员变量,只能被对象调用

4. 静态内存图

  * 被静态修饰内容存储在方法区的静态区中,有自己的所属,就是类

  * 优先于对象存在于内存中

  * 使用类名进行调用,不需要使用对象调用

  * 静态区存储的内容生存时间,最长

  * 静态区存储的静态变量,也有默认值

插入内存图如下

5. static关键字

  * 只能修饰成员,不能修饰局部

  * 静态不能直接调用非静态,静态进入内存的时候,堆中没有对象呢

      先进内存的,不能访问,后进内存的,后进的,可以访问先进内存的

  * 被静态修饰的方法中,不能写this,也不能写super

  * 非静态方法中,可以直接访问静态变量

静态的使用:

 

//演示静态的使用
class Person
{
	String name;
	int age;
	static String country;

	public void show(){
		System.out.println(name+".-----------.."+age+"...."+country);
	}
}


class StaticDemo 
{
	public static void main(String[] args) 
	{
		/*Person p1 = new Person();
		p1.name = "张三" ;
		p1.age = 20 ;
		Person.country = "中国";
		p1.show();
        */
		System.out.println(Person.country) ;

		Person p2 = new Person();
		p2.name = "李四" ;
		p2.age = 30 ;
		p2.show();


		Person p3 = new Person();
		p3.name = "王五" ;
		p3.age = 35 ;
		p3.show();
	}
}


6. 静态变量和实例变量的区别  *****重点的掌握

  * 静态变量存储在方法区的静态区

  * 实例变量跟对对象存储在堆内存中

  * 静态变量直接被类名调用

  * 实例变量,只能被对象调用

  * 静态变量跟着类的加载而加载,随着类的消失而消失,生命最长

  * 实例变量,跟随对象的加载而加载,跟对对像的消失而消失,生命相对较短

  * 静态变量属于类

  * 实例变量,属于对象

  * 静态变量被所有对象共享

  * 实例变量,是对象的特有数据

7. main方法

  public

   * 权限修饰符,最大权限,JVM调用main方法,必须保证main方法的权限足够大

  static 

   * 调用main的时候,直接被类名调用

  void

   * 没有返回值 ,如果有返回值,返回给JVM

  main

   * 不是关键字,但是被java占用,不能再用这个名字了

  String[] args

   * main方法的参数,是一个字符串类型的数组

 

8. 静态什么时候使用,静态成员变量,静态成员方法

  * 静态变量,就是对象中的共享数据

  * 当需要完成一个功能的时候,发现有的数据,是这些功能共享的内容,使用static进行修饰

  * 成员方法,什么时候用静态修饰呢

    * 当方法,没有调用过,或者是访问过特有数据的时候,建立将方法定义成静态

  * Arrays.sort(int[] arr);

使用方法:

class Person
{
	String name;//非静态,对象特有数据
	int age;//非静态,对象特有数据
	static String country;//静态,对象共享数据

   //show这个方法,访问了非静态的,方法,不能写成静态
	public void show(){
	  System.out.println(name+"..."+age+"..."+country);
	}

  //method没有访问过,对象的特有数据,建议写成静态
	public static void method(){
	 System.out.println(country);
	}
  
  public static  void method_1(){
     for (int x = 0 ;x < 5   ;x++ )
     {
		 for (int y = 0 ; y <= x;y++ )
		 {
			 System.out.print("*");
		 }
		 System.out.println();
     }
  }
}

class StaticDemo2 
{
	public static void main(String[] args) 
	{
		Person p = new Person();
		p.method_1();
		p.method();
	}
}


 

9. 静态代码块

  * 优先于构造代码块运行

  * 静态代码块很多,上到下的顺序执行

  * 运行一次

  * 出现的原因,在运只要程序运行,会先执行静态代码块,可以调用方法的

  * 面试:考察的是程序的运行顺序

/*
  静态代码块
*/

class Person 
{
	private static int x ;
	private String name;
	Person(String name){
	   this.name = name;
	   System.out.println("------构造方法");
	}

    static void show(){
	 System.out.println("show...static");
	}

	{
	  System.out.println("Person----构造代码块");
	}

	static{
	 System.out.println("Person----静态代码块"+x);
	 show();
	}
}

class StaticDemo3 
{
	public static void main(String[] args) 
	{
		new Person("lisi");
		//new Person("lisi");
		//Person p = null;
	}
}


 

 

 


 

ASP.Net+Android+IOS开发------期待与您交流

 详细请查看:http://edu.csdn.net

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值