在教大家写的第一个Java程序HelloWorld中,很多同学问static是什么意思,本节课终于讲到了。
概要
1.1 static关键字
1.1.1 static修饰成员变量
1.1.2 static修饰成员方法
1.1.3 static块
1.2 final关键字
1.2.1 final修饰变量
1.2.2 final修饰方法
1.2.3 final修饰类
1.2.4 static final常量
博主点评
1.1 static关键字
1.1.1 static修饰成员变量
· 用static修饰的成员变量不属于对象的数据结构;
· static变量是属于类的变量,通常可以通过类名来引用static成员;
· static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有"一份",无论该类创建了多少对象。
static修饰成员变量(续1)
1.1.2 static修饰方法
· 通常的方法都会涉及到对具体对象的操作,这些方法在调用时,需要隐式的传递对象的引用(this)。
· static修饰的方法则不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接用类名引用。
double c=Math.sqrt(3.0*3.0+4.0*4.0);
该方法在调用时,没有隐式的传递对象引用,因此在static方法中不可以使用this关键字。
static修饰方法(续1)
· 由于static在调用时没有具体的对象,因此在static方法中不能对非static成员(对象成员)进行访问。static方法的作用在于提供一些“工具方法”和“工厂方法”等。
... ... ...
Point.distance(Point p1,Point p2)
RandomUtils.nextInt()
StringUtils.leftPad(String str,int size,char padChar)
... ... ...
Math.squr() Matn.sin() Arrays.sort()
1.1.3 static块
· static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。
1.2 final关键字
1.2.1 final修饰变量
· final关键字修饰成员变量,意为不可改变。
· final修饰成员变量,两种方式初始化:
- 声明同时初始化
- 构造函数中初始化
· final关键字也可以修饰局部变量,使用之前初始化即可。
public class Emp{
private final int no=100;//final变量声明时初始化
public void testFinal(){
no=99;
} //编译错误,final的变量不可被改变
}
1.2.2 final修饰方法
· final关键字修饰的方法不可以被重写。
· 使一个方法不能被重写的意义在于:防止子类在定义新方法时造成的“不经意”重写。
1.2.3 final修饰类
· final关键字修饰的类不可以被继承。
final class Foo{}
class Goo extends Foo{} //会有编译错误
· JDK中的一些基础类库被定义为final的,例如:String、Math、Integer、Double等等。
· 使一个类不能被继承的意义在于:可以保护类不被继承修改,可以控制滥用继承对系统造成的危害。
1.2.4 static final常量
· static final修饰的成员变量称为常量,必须声明同时初始化,不可被改变。
· static final常量会在编译器被替换,例如:
class Foo{
public static final int NUM=100;
}
class Goo{
public static void main(String[] args){
System.out.println(Foo.NUM);
//代码编译时,会替换为:System.out.println(100);
}
}
static final常量Foo.NUM会在编译时被替换为其常量值(100),在运行Goo类时,Foo类不需要被载入。
博主点评:
static和final在写程序时经常会用到,static不要滥用,因为static存在堆中,生命周期长,占内存,要合理使用。
如果内容对您有帮助,请打赏我吧,您的支持是我更新的最大动力!
扫描关注我吧: