关键字 static 静态的

关键字 static 静态的

 一、 静态的属性: 只有"一份"(相当于全局变量)

    1) 是属于类的属性

    2) 使用类名方访问(在本类中可以省略)

    3) 是在类的加载期间分配, 在方法区中分配

4) 静态属性在软件运行期间只有"一份"

package day04;
/**
 *   静态的属性: 只有"一份"(相当于全局变量)
    1) 是属于类的属性
    2) 使用类名方访问(在本类中可以省略)
    3) 是在类的加载期间分配, 在方法区中分配
    4) 静态属性在软件运行期间只有"一份"
 */
public class Demo01 {
    public static void main(String[] args) {
       Cat tom = new Cat(5);
       Cat kitty = new Cat(3);
       System.out.println(tom.age+","+kitty.age);
       System.out.println(Cat.numOfCats);
    }
}
class Cat{
    int age;//实例变量, 每个对象都有一份
    static int numOfCats;//猫的数量,全体猫类型共享一个变量
    public Cat(int age) {
       this.age = age;
       Cat.numOfCats++;
    }
}


 二、静态的方法

    1) 是属于类的方法

    2) 使用类名直接调用, 在本类中可以省略类名

    3) 静态方法中"没有" 隐含参数this(super)  //与普通方法最大的差别

      3.1 静态方法不能访问当前对象(this)的属性和方法

4) 静态方法经常用于工具方法和工厂方法

5) 静态方法与普通方法最大的差别就是this 与当前对象无关的方法, 使用静态方法

6) 类的静态变量和方法存放在方法区

package day04;
/**
 * 静态方法
    1) 是属于类的方法
    2) 使用类名直接调用, 在本类中可以省略类名
    3) 静态方法中"没有" 隐含参数this(super)
      3.1 静态方法不能访问当前对象(this)的属性和方法
    4) 静态方法经常用于工具方法和工厂方法
  
   与当前对象无关的方法, 使用静态方法
 */
public class Demo02 {
    public static void main(String[] args) {
       Point p1=new Point(3,4);
       Point p2=new Point(6,8);
       System.out.println(p1.distance(p2));//5
       System.out.println(Point.distance(p1, p2));//5
    }
}
class Point{
    int x; int y;
    public Point(int x, int y) {this.x=x; this.y=y;}
    /** 计算当前(this)点到另外(other)一点的距离 */
    public double distance(/*Point this*/Point other){       
       int a = this.x-other.x;int b=this.y-other.y;
       return Math.sqrt(a*a + b*b);
    }
    /** 计算两点(p1, p2)间的距离 */
    public static double distance(Point p1,Point p2){
       int a=p1.x-p2.x; int b=p1.y-p2.y;
       return Math.sqrt(a*a + b*b);
    }
}


 

  工具方法:

 Arrays.toString()  Arrays.sort()

 Integer.toHexString()

 

三、代码块和静态代码块

代码块: 是在创建对象期间执行的代码块。类似构造器,一般使用构造器代替代码块的功能。

静态代码块: 在类加载期间执行的代码块, 只执行一次。有时候用于加载一次性资源, 如:背景图片

 

package day04;
/**
 *  代码块: 是在创建对象期间执行的代码块
 *  静态代码块: 在类加载期间执行的代码块, 只执行一次
 *   静态代码块: 有时候用于加载一次性资源, 如:背景图片
 */
public class Demo03 {
    public static void main(String[]  args) {
       new Koo();
       new Koo();
    }
}
class Koo{
    //System.out.println("HI");//编译错误,类中不能写语句
    {int a=8; System.out.println("HI"+a);}//代码块
    static{System.out.println("LoadKoo()");}//静态代码块
}


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值