黑马程序员技术交流社区
标题:
关键字final、static(8.7)
[打印本页]
作者:
lilongbin2016
时间:
2016-12-10 23:17
标题:
关键字final、static(8.7)
一、final关键字
为什么出现final修饰符?因为继承打破了面向对象封装的特性,为了保证有些类不被其他类继承,所以就出现了final关键字
final用法:
1、final既可以修饰类,又可以修饰方法,还可以修饰变量
2、final修饰的类是最终类,不能被继承
3、被final修饰的方法不能被重写
4、被final修饰的变量是一个常量,只能赋值一次(既可以修饰成员变量,又可以修饰局部变量)
5、常量书写规范:所以单词都大写,如果又有多个单词组成,那么之间_(下划线)隔开
二、static关键字
*static只能修饰成员(成员变量和成员方法)
*当多个静态代码块出现在同一类中,那么执行顺序按静态代码块出现的顺序
为什么用static呢? 用static修饰符可以操作共享数据,节省内存空间;
使用static关键字的特点 :
1、随着类的加载而加载,(静态修饰的成员生命周期最长,随着类的产生而产生,随着类的消失而消失,优先于对象存在,优先于主函数);
2、可以直接被类名调用(简化代码,节省了内存空间,方法被static修饰后照样可以通过对象调用该方法,但一般不这样用);
使用static注意事项:
1、静态只能访问静态成员(成员方法和成员变量)
2、静态方法不可以有this,super关键字
3、main方法(主函数)是静态方法
例如:
public class StaticDemo {
//姓名
String name;
//国籍
static String country="中国";
//显示人的信息
void show(){
System.out.println("name="+name+"country="+country);
}
static void show1(){
System.out.println("哈哈");
}
//不是程序入口
public static void main(String x) {
}
//main方法里面的参数必须是String类型的数组这个方法才是程序入口
public static void main(String[] args) {
StaticDemo sd1=new StaticDemo();
sd1.name="张三";
sd1.show();
StaticDemo sd2=new StaticDemo();
sd2.name="李四";
sd2.show();
//直接类名调用(这里类名可以省略)
StaticDemo.show1();
String str=StaticDemo.country;
System.out.println(str);
//静态不能直接访问非静态,可以通过new对象的方式间接的访问非静态
StaticDemo sd=new StaticDemo();
String name=sd.name;
System.out.println(name);
}
}
结果为:
总结:
static 利:实现数据共享,节省内存空间,简化代码
弊:声明周期长,所以在内存里面停留的时间较长,静态不能直接访问非静态
静态代码块
语法:static{}
特点:给“类”进行初始化的,而且静态块只在加载类的时候执行一次,优先于主函数执行
与{}区别:给所有的“对象”进行初始化
例:
public class StaticDemo1 {
static{
System.out.print("\ta");
}
public StaticDemo1(){
System.out.print("\tb");
}
{
System.out.print("\tc");
}
static void StaticDemo1(){
System.out.print("\td");
}
public static void main(String[] args) {
new StaticDemo1();
StaticDemo1 sd=new StaticDemo1();
sd.StaticDemo1();
}
}
结果:
*1、什么时候用静态变量?
*当操作共享数据的时候,用静态修饰变量(类变量);
*当对象有自己特有的属性值的话,那么就不能用static修饰
*2、什么时候用静态方法?
*当当前方法没有涉及到非静态成员的时候就用static修饰当前方法
*3、什么时候用静态代码块?
*当一个成员变量需要被初始化且只被初始化一次的时候就可以用静态代码块
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2