每日一句:努力的理由:怕委曲求全卑躬屈膝,活的没有尊严。
前言:数字的用途很广:取整,计算绝对值,更改显示格式,字符串转化为数字
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.可以用引用变量代替类的名称调用静态方法,但不规范,实质执行时还是用类的调用,并不知道是哪个实例调用。