- Math为例
在math这个类中有很多静态方法,而且你不能对Math进行实例化,即 Math mathObject = new Math();
会提示错误信息是,构造函数为 private,你不能调用构造函数(看到私有构造函数的作用了吧,关于private的构造函数,向后再说?)
- 静态方法
通常是使用方法, 则不需要类得实例. static 一种不依靠实例变量也就不需要对象的行为。用类名调用 Math.min(88, 77);
- 带有静态方法的含义
通常这种带有静态方法的类是不打算初始化的,我们可以通过私有的构造函数来限制非抽象类被初始化。 (类似Math类这种,如果定义成抽象类是不合适的,因为抽象类的特点是没有被继承的话就完全没用,但是Math还有很多方法是我们想使用的,而我们又不想创建Math的实例,所以,我们的解决方式是静态方法)。 静态方法是在类得基础上操作的,而非静态方法必须要实例化才能操作。
静态方法不能调用非静态变量,静态方法无法引用到该类的任何实例变量(实例变量是只有创建对象时才会初始化,而静态方法是在类得模板里的,同样静态方法不能调用非静态方法)
如果类只有静态方法,你可以将构造函数标记为 private 以免被初始化。
- 静态变量:它的值对所有实例来说都相同
静态变量,就是共享变量,静态方法,也是共享方法,这样做是有意义的,比如你想知道有多少这个类的对象被创建了,怎么办,就是放一个共享的静态变量,创建一个,这个变量++,就可以了。
- 静态变量的作用
静态变量会在该类得说任何静态方法执行之前就初始化。静态变量是类被加载时初始化的,通常,JAVA虚拟机会加载某个类是因为第一次有人尝试要创建该类的新实例,或是使用该类的静态方法或变量。
- 静态常数 final
public static final double PI = 3.1415926;
常量的名称应该都用大写字母
类似 PI 这种还是用静态的比较好,如果是实例常量,那岂不是每个实例对象里边都有一个这么个常量,而它又是不变化的。
- 静态常量 初始化
1. 声明的时候: public class Foo { public static final int FOO_X = 25; }
2. 在静态初始化程序中:
public class Bar {
public static final double BAR_SIGN;
static { // 这段程序会在类加载时执行
BAR_SIGN = (double)Math.random();
}
}
- final
final的变量代表你不能改变它的值
final的方法代表你不能覆盖掉该方法
final的类代表你不能继承该类(也就是创建它的子类)
- 原子类型的包装, int, char, double 等等
当你想以对象的方式来处理原子类型时,就使用包装
以上的包装是很重要的,因为在 ArrayList一定要对象的类型。
- autoboxing
从 java 5.0 开始加入的 autoboxing 功能 能够自动的将 原子类型转换成包装对象,例如:
其他使用的 autoboxing 情况:
包装类型的静态实用方法,例如 Integer.parseInt(s); Double.toString(d);
- 数字的格式化
在java5.0之后通过 java.util的Formatter这个类来提供的。
1. 将数字以带逗号的形式格式化,String s = String.format(“%, d”, 10000000); // 显示结果是 1,000,000,000 这里的%表示把参数放在这里的意思,
很明显,%符号后面不可以随便填上任意的字符,格式化的语法
超过一项以上的参数时
日期格式化
操作日期
java.util.Date 和 java.util.Calendar
Calendar 有很多 API, 直接调用就可以操作