类与对象(二)

静态代码块只会被执行一次,它在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语句,而且必须位于源文件的第一句

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值