类与对象(二)

来源:互联网 发布:linux能运行在arm上吗 编辑:程序博客网 时间:2024/05/21 11:22

静态代码块只会被执行一次,它在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)等

njava.util包:提供日期类(Date)、集合类(Collection)等实用类

如果一个类访问了来自另一个包(除java.lang)中的类,则首先必须通过import语句引入该类

import com.xxx.edu.server.Teacher;


在一个Java源文件中,只允许有一个package语句,而且必须位于源文件的第一句

 

 

 

 

 

 

0 0