Java基础:22 static

1、关键字:static

(1)作用:在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。

(2)使用范围: 在Java类中,可用static修饰属性、方法、代码块、内部类

(3)被修饰后的成员具备以下特点:

  • 随着类的加载而加载
  • 优先于对象存在
  • 修饰的成员,被所有对象所共享
  • 访问权限允许时,可不创建对象,直接被类调用
class Circle { 
    private double radius; 
    public static String name = "这是一个圆"; 
    public static String getName() { 
        return name; 
    } 
    public Circle(double radius) { 
        this.radius = radius; 
    } 
    public void display() { 
       System.out.println("name:" + name + ",radius:" + radius); 
    } 
}

public class StaticTest { 
    public static void main(String[] args) { 
        Circle c1 = new Circle(2.0); 
        Circle c2 = new Circle(3.0); 
        c1.display();//name:这是一个圆,radius:2.0
        c2.display();//name:这是一个圆,radius:3.0 
    } 
}

2、类变量

类变量(类属性)由该类的所有实例共享

class Person { 
    private int id; 
    public static int total = 0; 
    public Person() { 
        total++; 
        id = total; 
    } 
    public static void main(String args[]){ 
         Person Tom=new Person(); 
        Tom.id=0; 
        total=100; // 不用创建对象就可以访问静态成员 
    } 
}


public class StaticDemo { 
    public static void main(String args[]) { 
        Person.total = 100; //不用创建对象就可以访问静态成员 
        //访问方式:类名.类属性,类名.类方法 
        System.out.println(Person.total); 
        Person c = new Person(); 
        System.out.println(c.total); //输出101 
    }
}

3、 类方法(class method)

(1)没有对象的实例时,可以用类名.方法名()的形式访问由static修饰的类方法。
(2)在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。

class Person { 
    private int id; 
    private static int total = 0; 
    public static int getTotalPerson() { 
        //id++; //非法 
        return total;
    } 
    public Person() { 
        total++; id = total; 
    }
} 
public class PersonTest { 
    public static void main(String[] args) { 
        System.out.println("Number of total is " + Person.getTotalPerson()); //Number of total is 0
        //没有创建对象也可以访问静态方法 
        Person p1 = new Person(); 
        System.out.println( "Number of total is "+ Person.getTotalPerson()); //Number of total is 1
    }
}

(3)因为不需要实例就可以访问static方法,因此static方法内部不能有this和super。
(4)static修饰的方法不能被重写

class Person { 
    private int id; 
    private static int total = 0; 
    public static void setTotalPerson(int total){ 
        this.total=total; 
        //非法,在static方法中不能有this,也不能有super 
    } 
    public Person() { 
        total++; 
        id = total; 
    }
} 
public class PersonTest { 
    public static void main(String[] args) { 
        Person.setTotalPerson(3); 
    } 
}

4、main方法

由于Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是 public,又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须 是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。
又因为main() 方法是静态的,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值