调用方式1:如果是在当前类的static方法中,则直接调用
调用方式2:如果是在其他类的static方法中,则需要通过类名.方法()调用
备注1:普通方法(设有使用static关量字修饰的方法)允许调用static修饰的方法
备注2:static修饰的方法(静态方法)不允许调用普通方法
?
package com.xn.Sat;
//static关键字
//
public class Sat03 {
public static void main(String[] args) {
dosth();
//Test2.dosth;
}
public static void dosth(){
//dowork();
}
public void dowork() {
dosth();
}
}
静态方法“允许”调用静态方法
普通方法“允许”调用静态方法其它普通方法
?
package com.xn.Sat;
//静态方法和普通方法之间的调用关系总结:
//静态方法“允许”调用静态方法
//普通方法“允许”调用静态方法其它普通方法
public class Sat04 {
public static void main(String[] args) {
//调用静态方法
Father.dosth();
//调用普通方法(实例方法)
Father f=new Father();//创建对象(实例)
f.dowork();//调用普通方法
//f.dosth();调用静态方法(不推荐)
}
}
class Father{
//静态方法
public static void dosth() {
//静态方法中不允许调用普通方法
//this.dowork();
}
//普通方法(实例方法)
public void dowork() {
//普通方法中允许调用静态方法
dosth();
}
}
静态代码块(先父类、再子类)=>父类构造代码块=>父类构造方法=>子类构造代码块=>子类构造方法
?
package com.xn.Sat;
//static关键字修饰的静态代码块
//执行顺序
//静态代码块(先父类、再子类)=>父类构造代码块=>父类构造方法=>子类构造代码块=>子类构造方法
public class Sat05 {
//主函数所在的类必须被加载
static {
System.out.println("Sat05的静态代码块");
}
public static void main(String[] args) {
// Person p1=new Person();
// Person p2=new Person();
User u1=new User();
User u2=new User();
}
}
//父类
class Person{
//静态代码块:类被"加载"时,静态代码块自动执行
static {
System.out.println("Person父类静态代码块1执行ing....");
}
static {
System.out.println("Person父类静态代码块2执行ing....");
}
//构造代码块:每次调用构造方法前,构造代码块自动执行
{
System.out.println("Person父类构造代码块执行ing....");
}
public Person(){
System.out.println("Person父类无参构造方法执行ing....");
}
}
//子类
class User extends Person{
static {
System.out.println("User子类静态代码块1执行ing....");
}
{
System.out.println("User子类构造代码块执行ing....");
}
public User(){
System.out.println("User子类无参构造方法执行ing....");
}
}
eg1
package com.xn.Sat;
//static 关键字修饰的静态变量
public class Sat06 {
public static void main(String[] args) {
//普通成员变量:通过实例对象
Counter v1=new Counter();
v1.value++;
Counter v2=new Counter();
v2.value++;
v2.value++;
v2.value++;
System.out.println("v1的value="+v1.value);
System.out.println("v2的value="+v2.value);
//静态成员变量:可以通过实例对象或类名
Counter c1=new Counter();
Counter c2=new Counter();
c1.count++;
c2.count++;
c2.count++;
c2.count++;
System.out.println("c1的count="+c1.count);
System.out.println("c2的count="+c2.count);
}
}
class Counter{
//成员变量
int value=0;//普通成员比那辆(通过实例)
static int count=0;//静态成员变量(通过实例或类名)
}
eg2
package com.xn.Sat;
public class Sat07 {
public static void main(String[] args) {
Coupon coupon1=new Coupon();
Coupon coupon2=new Coupon();
Coupon coupon3=new Coupon();
System.out.println("创建Coupon优惠券对象的个数为:"+Coupon.count);
System.out.println("优惠券1的编号为:"+coupon1);//预期输出1001
System.out.println("优惠券2的编号为:"+coupon2);//预期输出1002
System.out.println("优惠券3的编号为:"+coupon3);//预期输出1003
}
}
//优惠券
class Coupon{
private int id;//优惠券编号
private static int idval=1000;
public static int count=0;
public Coupon(){
id=++idval;
count++;
}
@Override
public String toString() {
return String.valueOf(id);
}
}