java基础二(封装)

我们都知道,在java中,面向对象三大特征是:封装、继承、多态。接下来我们首先来看在封装中的一些重点难点。

1.static
用static修饰的成员,称之为静态成员,也称为类成员。无论类实例化多少对象,都会共用一块同样的内存空间。静态成员从类第一次被加载的时候就会产生,一直到这个类不再有任何对象被使用,就是说彻底进行销毁,静态成员才会进行资源的释放。
1)特征:1.类对象共享   2. 类加载时产生,销毁时释放,生命周期长
2)静态的访问方法:

      1.对象.成员

       2. 类.成员(因为是类成员,所以可以用类名.静态成员调用)

          eg. Cat cat = new Cat(); 

          cat.price与Cat.price效果相同,但是最好是用第二个访问方法(其中price是static修饰的静态成员)。
  3)static + 属性==》静态属性、类属性
  4)static + 方法==》静态方法、类方法
  其中,类方法的调用,既可以用:1.对象.方法。又可以使用  2.类.方法(但是推荐第二个)
  5)static + 类  ==》不可以!
  6) static + 方法中的局部变量,也是不存在的!
  7)在成员方法中,可以直接访问类中静态成员或静态方法。
        在静态方法中,不能直接访问同一个类中非静态成员,只能直接调用同一个类中的静态成员。如果一定要调用,只能通过  对象实例化后,通过对象.成员方法的方式进行访问非静态成员。
        同样有一点需要说明,在静态方法中,不能使用this关键字。this关键字等同于本类对象,与static是矛盾的。


代码块
1)普通代码块:存在于普通方法。顺序执行,先出现,先执行
eg.public void eat(){

{
 System.out.println("我是普通代码块1);
}//普通代码块

}
2)构造代码块:创建对象时调用,优先于构造方法执行。构造代码块在一个类中也可以有多个,是顺序执行的。
{
 System.out.println("我是构造代码块1);
}//构造代码块        
{
 System.out.println("我是构造代码块2);
}//构造代码块

3)静态代码块:在构造代码块前加一个static,就会升级为静态代码块。类加载时调用,优先于构造代码块执行。静态代码块也可以有多个,按照顺序执行。
static{ 
    System.out.println("我是静态代码块1");
    }//静态代码块

4) 问题: 当有多个实例对象,静态代码块会执行几次,构造代码块会执行几次?
答:静态代码块无论实例化多少个对象,都只执行一次,而构造代码块会在每次进行实例化都会执行一次。

       顺序:先执行静态代码块,接着构造代码块,最后构造方法。
注:1)构造代码块中可以对普通成员赋值,也可以对静态成员赋值,而静态代码块中,只可以对静态成员赋值。这与静态方法中访问非静态成员的方式类似,我们当然也可以进行对象实例化,通过对象.属性的方式去访问。
2)根据静态代码块的特殊性,如果对于一些我们仅希望执行一次的代码,可以放在静态代码块中,来提高程序效率。

5) 了解普通代码块中,局部变量的使用。

public void run(String name) {
		
		{
			int temp=12;
			System.out.println("我是普通代码块1,temp="+temp);
		}//普通代码块
		
		{
     		        int temp=13;
			System.out.println("我是普通代码块2,temp="+temp);
		}//普通代码块
	}

其中,两个temp各有自己的作用空间,不属于同名变量使用。

public void run(String name) {
		{
			int temp=12;
			System.out.println("我是普通代码块1,temp="+temp);
		}//普通代码块
		        int temp=14;
		{
//			int temp=13;
			System.out.println("我是普通代码块2,temp="+temp);
		}//普通代码块
	}

若是在两个代码块中间定义了一个temp,这个temp的作用空间一直到方法体的结束,因此第二个普通代码块中的temp属于同名变量,会报错。

public void run(String name) {
		int temp=14;
		{
//			int temp=12;
			System.out.println("我是普通代码块1,temp="+temp);
		}//普通代码块
		
		{
//			int temp=13;
			System.out.println("我是普通代码块2,temp="+temp);
		}//普通代码块
	}

若是一开始就定义了一个temp,此temp的作用空间一直到方法体的结束,因此两个普通代码块中的temp都会报错。

猜你喜欢

转载自blog.csdn.net/Wang_susu/article/details/86603907