10.1.数字与静态

来源:互联网 发布:java.util jar包 编辑:程序博客网 时间:2024/06/06 03:06

每日一句:努力的理由:怕委曲求全卑躬屈膝,活的没有尊严。


前言:数字的用途很广:取整,计算绝对值,更改显示格式,字符串转化为数字

Math方法


最接近全局的方法,因为Java中没有东西是全局的,存在一类方法不依赖实例变量的

值,如Math类的round()方法,1000个Math实例执行round(42.2)都是42,所以不会

为了执行round而在宝贵堆上建立Math的实例,即不存在空间被Math实例占用,更不存在

Math的实例变量。总之,你不需要创建math的实例,也无法创建(私有类型)。


如int x=Math.round(42.2)


 说明:Math类的所有方法是静态的,不需要实例变量值,所以不需要特定对象判别行为,即无需Math实例,只会使用类本身。

静态方法与非静态方法


静态方法

static关键词,标记出不需要类实例的方法,所以也不依赖实例变量,没有对象,调用

时直接用类名称,如Math.round(42.2)

非静态方法

依赖对象的实例变量,需要创建实例才能操作方法


带有静态方法的含义


回顾:抽象类不能被创建出实例,不能被初始化,但可通过标记为private(只能被同类

的程序调用)来限制非抽象类的初始化


带有静态方法的类通常不打算被初始化,带有main()的类都算有静态方法

静态方法特点


1.静态方法不能调用非静态的变量,因为静态方法不依赖于实例变量,不知道实例变量值,自然无法使用实例变量值


2.静态方法不能调用非静态方法


3.静态变量:它的值对所有的实例来说都相同,即被同类的所有实例共享的变量


public class Duck{  private int size;  public static void main(String[] args){  //静态方法    System.out.printIn("Size is"+size)  //不知道哪个实例,更不知道实例变量   }}public class Duck{  private int size;  public static void main(String[] args){  //静态方法    System.out.printIn("Size is"+getSize())  //不知道哪个实例,要谁的size?   }  public void getSize(){  return size;    } }class Duck{   int duckCount=0;    public Duck(){        duckCount++;}}


上述程序并不能统计创建了多少实例,因为每个Duck实例初始化时duckCount的值都是0

需要用上只有一份拷贝的变量,即静态变量。

辨析:实例变量每个实例只有一个,静态变量每个类一个。


静态变量的起始动作


静态变量是在类被加载时初始化的,加载类即有人要创建类的新实例或使用类的静态方

法和变量,换言之:静态项目的初始化有两项保证


1.静态变量会在该类的任何对象创建之前就完成初始化


2.静态变量会在该类的任何静态方法执行之前就初始化


若未赋初值,则均各自设定为默认值.


静态变量也是通过类的名称来存取的。


思考:创建只能创建一个实例的类且所有人运用这一份实例?

书海拾荒:

1.取得新对象的方法:1.通过new 2.序列化 3.JAVA Reflection API

2.可以用引用变量代替类的名称调用静态方法,但不规范,实质执行时还是用类的调用,并不知道是哪个实例调用。

原创粉丝点击