static 理解

先说一下static可以修什么
1、类
2、变量
3、方法
4、静态代码块类:
先说一下static修饰类,一般的类是不许用静态来修饰的,有一种情况叫做静态内部类,关于这个可以看我上一篇文章,哪里有介绍。
变量:修饰边变量的时候又叫做全局变量,这样的变量虽然在类内部,但是它并不输入某一个对象。使用方法直接使用类名

public class Father {	
	public String name;
	public static String sex;
	
}


Father.sex = "男";
Father.Name = "张三";//错误

Father father = new Father();
father.name = "张三";
public class Son extends Father {
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		super.eat();
	}
}

father.sex = "女";//警告
 

从我的注释可以看出来,name不是静态变量,所以直接用类名.变量名会报错

还要提示一点如果一个变量用static修饰,你还用对象对调用可以,但是java会提示一个警告错误,java认为这样的编写不是好的习惯,会让人产生误解,所以会提示警告。

在一些配置文件的变量中常用静态变量。

方法:

静态修饰方式时是不能够被子类重写的。下面看一个例子:

public class Father {
	
	public String name;
	public static String sex;
	
	public static void eat()
	{
		System.out.println("eating。。。。。");
	}
	
}
public class Son extends Father {
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		super.eat();//错误
	}
}
提示错误信息是:

Multiple markers at this line
- This instance  method cannot override the static method from Father
- The method eat() of type Son must override or implement a supertype method
- overrides com.example.bb.Father.eat
静态方法不能被重写

在android程序设计第二版46页提到,现在的java中几乎没有必要再使用静态方法,早期的的动态方法要慢于静态方法,所以常常人们用静态方法来优化代码,

但是现在编译在Dalvik环境下,已经不需要这样的优化了,所以过多的使用静态方法会使架构设计不良。

静态模块:

先来简单的接受一下生么叫代码块

简单的理解由{.....}两个中括号包裹起来的就叫做代码块,这样的代码块如果用static修饰就变成了静态代码块。

下面先看一个例子我们通过例子来理解一下静态代码块作用。

public class Father {
	{
		System.out.println("Father 代码块");
	}
	static {
		System.out.println("Father 静态代码块");
	}
	public Father()
	{
		System.out.println("Father 构造方法");
	}
}
public class Son extends Father{
	{
		System.out.println("Son 代码块");
	}
	static {
		System.out.println("Son 静态代码块");
	}
	public Son()
	{
		System.out.println("Son构造方法");
	}
}

调用测试方法:

public static void main(String[] args) {
new Son();

                new Son();
}


运行结果:

Father 静态代码块
Son 静态代码块
Father 代码块
Father 构造方法
Son 代码块
Son构造方法
Father 代码块
Father 构造方法
Son 代码块
Son构造方法

我来解释一下

执行顺序是 

第一次执行new Son();

父类静态代码块(只执行一次)---->子类静态代码块(只执行一次)---->父类代码块---->父类构造函数---->子类代码块---->子类构造方法

第二次执行new Son();

父类代码块---->父类构造函数---->子类代码块---->子类构造方法

从代码上分析

静态代码块不属于对象,会在程序new 新对象前执行并且只执行一次。

代码块会比构造方法先执行,并且每次new新的对象都会执行一次。

静态代码块主要就是在加载的时候执行,而且只执行一次,有唯一性。

好啦,关于static就说道这里了,欢迎大家批评指正害羞


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值