学习内容:学习JavaSE(Day10)
1、Math类
2、静态
3、单例模式
4、包装类
1、Math类
(1)Math类中的方法都是static的,调用静态方法可以直接使用类名.方法名来调用,不需要先创建类的一个对象。Math这个类在java.lang软件包中,这个包会自动引入,所有这个软件包中的类不需要再import就可以直接使用。
绝对值:
int a = Math.abs(-10);
int b = Math.abs(10);
最大值,最小值:
int max = Math.max(12, 23);
int min = Math.min(12, 23);
随机数(产生10以内的整数):
double d = Math.random();
System.out.println((int)(d * 10));
2、静态
(1)静态方法:静态方法可以使用类直接调用,使用static关键字修饰的方法就是静态方法。当一个方法中没有使用实例变量时,这个时候就可以考虑将该方法声明为静态方法,只会执行一次。静态方法中不能调用普通变量和方法,可以调用静态变量或方法,普通方法可以调用静态方法。
public static int getMax(int numA, int numB) {
System.out.println("max");
getMin(12,13);
return numA > numB ? numA : numB;
}
int max = Math.getMax(12, 13);
System.out.println(max);
(2)静态方法与非静态方法:
生命周期:
静态方法:与静态成员变量一样,属于类的本身,在类装载的时候被装载到内存,不自动进行摧毁,会一直存在内存中,直到JVM关闭。
非静态方法:又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM回收之后,也跟着消失。
效率:
静态方法的使用效率比非静态方法效率高。
按照上面的概念,只要内存够用,都可以使用静态的。使用静态方法也会带来一些问题。静态方法:是共享代码段,静态变量是共享数据段。既然是“共享”就有并发的问题。非静态方法:是针对确定的一个对象的,所以不会存在线程安全的问题。
静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
(3)静态变量:静态变量属于类,实例变量属于实例。静态变量会在该类调用静态方法之前进行初始化,静态变量会在创建对象之前进行初始化,只初始化一次。
静态变量是共享的,同一个类的所有实例共享一份实例变量。
实例变量:每个实例一个 。
静态变量:每个类一个。
static String name = buildName();
private static String buildName() {
System.out.println("buildName");
return "Jerry";
}
Math.name = "Rose";
Math math = new Math();
math.name = "Alex";
Math math1 = new Math();
math1.name = "Hanks";
System.out.println(math.name);
System.out.println(math1.name);
结果是:
buildName
Hanks