静态代码块只会被执行一次,它在Java虚拟机加载类时执行,如果类中包含多个静态块,则按从上往下顺序执行
一:静态变量
什么是静态变量
态变量是指被static修饰的变量
静态变量属于某个类,被所有实例共享
可以通过类名访问或者通过实例名访问
使用静态变量
static类型变量名
class Monkey {//声明静态变量
static int count=0;
}
class Test {
public static void main(String[] args) {
for(int i=0;i<3;i++){
Monkey m=new Monkey();
m.count=m.count+1;
}
//通过类名访问静态变量
System.out.println(Monkey.count);
}
静态变量与非静态变量的区别
class SaticVar {
//实例变量
int a=1;
//静态变量
static int b=1;
}
class Test {
public static void main(String[] args) {
StaticVar s1=new StaticVar();
s1.a++;
s1.b++;
System.out.println("实例变量a="+ s1.a);
System.out.println("静态变量b="+StaticVar.b);
StaticVar s2=new StaticVar();
s2.a++;
s2.b++;
System.out.println("实例变量a="+ s2.a);
System.out.println("静态变量b="+ s2.b);
}
}
静态变量在内存中只有一个内存空间,在加载类的过程中完成静态变量的内存分配,可以直接通过类名来访问
实例变量每创建一个实例,就会为实例变量分配一次内存,各个对象访问自己的变量。
静态变量可以被类名或实例对象访问,而实例变量只能被实例对象访问
二:静态方法
静态方法:被static修饰的方法称为静态方法或类方法
static[修饰符] 返回值类型 方法名(类型 参数1,类型 参数2…){
方法体
}
class Monkey {
//静态方法
static void play(){
System.out.println("会玩金箍棒!");
}
}
class Test {
public static void main(String[] args) {
//示例化10个对象
for(int i=1;i<=10;i++){
Monkey houge=new Monkey();
//通过类名调用静态方法
Monkey.play();
}
}
}
<p><span style="color:black;">静态方法只能访问静态变量,不能访问实例变量,因为加载静态方法时,实例变量</span></p><p><span style="color:black;">还没有分配内存空间。</span></p>
三:静态代码块
静态代码块不存在于任何方法体中。
class StaticBlock {
static{
System.out.println(“我是静态代码块");
}
}
静态代码块只会被执行一次,它在Java虚拟机加载类时执行,
如果类中包含多个静态块,则按从上往下顺序执行
类中不同部分执行顺序
class Order {
int a=1;
static int b=1;
{
System.out.println("实例变量a="+a);
System.out.println("代码块执行!");
}
static {
System.out.println("静态变量b="+b);
System.out.println("静态代码块执行!");
}
Order(){
System.out.println("构造方法执行");
}
}
<pre class="java" name="code">class Test {
public static void main(String[] args) {
Order order=new Order();
}
}
编译后得出结论:
静态变量初始化→静态代码块→初始化静态方法→初始化实例变量→代码块→构造方法
四:常量
变量的生命周期
Java中有3种变量,分别为类变量、实例变量和某个方法中临时定义的局部变量。不同的变量的生命周期不同
class Cycle {
int var1 = 1;
static int var2 = 2;
public int add(){
int var3 = var1 + var2;
return var3;
}
}
class Test {
public static void main(String[] args) {
Cycle c=new Cycle();
c.add();
}
}
var 1,2,3分别代表
实例变量、静态变量、局部变量
final变量final变量
class FinalVar {
final int MAX_VALUE=20;
final int MIN_VALUE;
MAX_VALUE=30;
static final double PI=3.1415926;
PI=3.1415;
}
final int MAX_VALUE=20;对的
final int MIN_VALUE;错误 定义时候必须初始化
MAX_VALUE=30;错误,不能重复赋值
staticfinal double PI=3.1415926 正确
PI=3.1415;错误 静态实例变量不能重复赋值
使用final修饰的变量表示取值不会改变的常量
final修饰的实例变量的值不能改变,这就意味着在实例化具有final变量的多个对象时,每个对象都会有相同的final变量值。这种实例变量反而使用静态变量会更符合设计规则,因此经常将final变量同时定义成为静态的(static final)。
Final变量的特征
final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量和局部常量
final类型的变量必须显式地初始化,否则将导致编译错误
final变量只能被赋值一次
在定义final常量时,一般以大写字母命名,且多个单词之间以“_”符号隔开
五:包
一个文件夹里面不能放入同样名字的资源文件,java也是如此,去了更好的更合理的去分配资源,于是包出现了。
Java的常用包
JDK提供的Java常用包
java.lang包:系统类(System)、整数类(Integer)和字符串类(String)等
java.io包:文件输入流类(FileInputStream类)、文件输出流类(FileOutputStream)等
n
java.util
包:提供日期类(Date)、集合类(Collection)等实用类
如果一个类访问了来自另一个包(除java.lang)中的类,则首先必须通过import语句引入该类
import com.xxx.edu.server.Teacher;
在一个Java源文件中,只允许有一个package语句,而且必须位于源文件的第一句