Math方法
Java中不存在全局的对象,但有些方法不需要依靠实例变量值,,如Math这个类中的取绝对值方法,它只依赖于传入的参数,而不依赖于实例变量的状态。因此,调用Math中的方法时,无需创建Math的实例,实际上编译器也不允许创建Math的实例,因为Math的构造函数被标记为私有的。
在Math这个类中的所有方法都不需要实例变量值,因为这些方法都是静态的。
Math在的一些方法:
Math.random():返回介于0.0~1..0之间的双精度浮点数。
Math.abs():返回双精度浮点数类型参数的绝对值。
Math.round():返回四舍五入之后的整形或长整型值。
Math.min():返回两参数中较小的那一个。
Math.max():返回两参数中较大的那一个。
静态方法
非静态方法中,实例变量的值会影响到方法的行为。非静态方法由引用变量的名称调用。
static关键词可以标记出不需要类实例方法。静态方法即“一种不依靠实例变量也就不需要对象的行为”。非静态方法以累的名称调用。
1.静态的方法不能调用非静态的变量。
2.静态变量也不能调用非静态的方法。
静态变量
1.静态变量是共享的。
2.同一类所有的实例共享一份静态变量。
3.静态变量会在该类的任何对象创建之前就完成初始化。
4.静态变量会在该类的任何静态方法执行之前就初始化。
final
1.静态的final变量是常数:一个被标记为final的变量一旦被初始化后就不会改变。常数变量的名称应该都是大写字母。。
静态初始化程序是一段在加载类时会执行的程序代码,它会在其他程序可以使用该类之前就执行,所以适合放静态final变量的起始程序。
class zuchongzhi {
final static int PI;
static {
PI=3.15159
}
}
//静态final变量的初始化
//方法一:声明的时候
public class Boo{
public static final int BOO_X = 25;
}
//方法二:静态初始化程序
public class Boo{
public static final int BOO_X ;
static {
BOO_X = 25;
}
}
2.final也可以用来修饰非静态的变量,这代表该变量的值不能变动。
3.final也可以用来防止方法的覆盖或创建子类。
包装
Java 5.0之前,要以对象方式来处理primitive主数据类型时,就必须将其包装起来。
包装值: int i = 288;
Integer iWrap = new Integer(i);
解开包装:int unWrapped = iWrap.intValue();
从Java 5.0开始加入的autoboxing功能能自动将primitive主数据类型转换成包装过的对象。
//无autoboxing
public class Boo{
ArrayList foo = new ArrayList();
foo.add(new Integer(5));
Integer one = (Integer) foo.get(0);
int intOne = one.intValue();
}
//有autoboxing
public class Boo{
ArrayList<Integer> foo = new ArrayList<Integer>();
foo.add(5);
int One = foo.get(0);
}
除了一般的类操作外,包装也有一组实用的静态方法,如Integer.parseInt()方法能够取用String并返回primitive主数据类型值。
数字的格式化
Java 5.0后,可以利用Formatter这个类提供的方法来进行数字的格式化。
将数字以带逗号的形式格式化
String s = String.format("%, d", 1000000000);
结果:1,000,000,000
格式化结构: 1.格式指令
2.要格式化的值
%,d:以十进制整数带逗号格式化。
%.2f:以小数点后两位格式化。
%,.2f:整数部分以有逗号的方式,小数部分以两位来格式化。
格式化说明的格式:唯一的必填项目是类型。
%[argument number] [flags] [width] [.precision] type
argument number:指定要格式化的是哪一个值
flags:特定类型的特定选项
width:最小字符数
.precision:精确度
type:类型
日期的格式化
完整的日期与时间:%tc
String.format("%tc", new Date());
只有时间:%tr
String.format("%tr", new Date());
周、月、日:%tA %tB %td
Date today = new Date();
String.format("%tA,%tB,%td", today,today,today);
不用重复给参数的写法:
Date today = new Date();
String.format("%tA,%<tB,%<td", today);
Calendar API
要取得当前的日期时间就用Date,其余功能可以从Calendar上面找。
Calendar cal = Calendar.getInstance();
cal.set(2014, 1, 7, 15, 40);
long day1 = cal.getTimeInMillis();
day1 += 1000*60*60;
cal.setTimeInMillis(day1);
cal.add(cal.DATE, 35);