Java—-static用法和this的用法
- this
在方法的使用有两种情况
普通函数中,指向调用该方法的对象
构造函数中,指向当前要被初始化的对象
this不能用于static方法中,因为static是隶属于类的,可以是用类名直接调用,而this的使用必须有对象。下面是this的分析代码
public class TestThis {
public static void main(String[] args) {
Pig pig = new Pig("八戒");
System.out.println(pig.name);
pig.sayHello("小猪");
}
}
class Pig {
String name;
public Pig() {
System.out.println("Pig.Pig(我是无参的构造器)");
}
public Pig(String _name) {
//当前对象是否已经被创建,创建完成之后才能够进行初始化
//这里的this 当pig调用该类的时候,this的指向就是pig这个对象
this.name = _name;
}
}
2.static
当static修饰变量的时候, 该变量属于类变量,可以被所有对象共享,当一个对象修改了这个变量的时候,所有对象中这个变量都会改变。下面是代码
public class Test01{
public static void main(String[] args){
MengNiu m=new MengNiu(11);
MengNiu m1=new MengNiu(2);
System.out.println(m.count);
System.out.println(m1.count);
}
}
class MengNiu{
static int count;
public MengNiu(int count){
this.count=count;
}
}
输出的结果是 两个对象的count都是25,说明了 当一个对象改变该变量后,该变量在整个类中都会改变。
当static修饰方法的时候,该方法是静态方法,隶属于类,可以使用类名直接调用。可以被所有的对象中使用。因为可以用类名直接调用所以,静态方法里面不能存在非静态变量,因为非静态变量必须实例化以后才能使用。下面是代码
public class Test01{
public static void main(String[] args){
MengNiu.m();
}
}
class MengNiu{
static int count;
public MengNiu(int count){
this.count=count;
}
public static void m(){
}
}
当static在代码块中使用的时候,修饰的是整个代码块,当类被加载的时候就开始执行,jvm只加载类一次,所以静态代码块只运行一次。静态代码块 存在的意义就是初始化类。下面是静态代码块的代码
public class TestStaticContext {
public static void main(String[] args) {
Long long1 = new Long();
}
}
class Long {
static {
System.out.println("我是静态代码块");
sayHello();
}
public Long() {
System.out.println("Long.Long(我创建了一条龙)");
}
public static void sayHello() {
}
public void sayHi() {
}
}
输出的结果,先输出静态代码块的内容 在输出构造函数输出语句输出的句子。
我是静态代码块
Long.Long(我创建了一条龙)