Java 修饰符 与 Number&Math类

主要说修饰符的static和final以及Number课件中我不太懂的几个题。

修饰符

static

1.静态变量:

static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
换句话说就是用static声明类变量,所有对象里的该变量都一样(相当于类的全局变量

2.静态方法:

static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class mystery{
public static int mystery(int a, int b){
// 这里一定要有static!!
//要不然会报错:无法从静态上下文中引用非静态 方法 mystery(int,int)
if(0==b)
return 0;
else return a + mystery(a, b-1);
}
public static void main(String[] args){
int x = mystery(1,7);
System.out.println(x);
}
}

fianal

final class 不可被继承
final可以用于variables, methods, classes, 限制继承和覆写

protected

接口及接口的成员变量和成员方法不能声明为 protected
protected对同一包内的类和所有子类可见。

Number&Math类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

常用的

1 xxxValue()
将 Number 对象转换为xxx数据类型的值并返回。
3 equals()
判断number对象是否与参数相等。
5 toString()
以字符串形式返回值。
6 parseInt()
将字符串解析为int类型。
7 abs()
返回参数的绝对值。
11 round()
它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
12 min()
返回两个参数中的最小值。
13 max()
返回两个参数中的最大值。
27 random()
返回一个随机数。

不常用的

8 ceil()
返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。
9 floor()
返回小于等于(<=)给定参数的最大整数 。
14 exp()
返回自然数底数e的参数次方。
15 log()
返回参数的自然数底数的对数值。
16 pow()
返回第一个参数的第二个参数次方。
17 sqrt()
求参数的算术平方根。
18 sin()
求指定double类型参数的正弦值。
19 cos()
求指定double类型参数的余弦值。
20 tan()
求指定double类型参数的正切值。
21 asin()
求指定double类型参数的反正弦值。
22 acos()
求指定double类型参数的反余弦值。
23 atan()
求指定double类型参数的反正切值。
24 atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
25 toDegrees()
将参数转化为角度。
26 toRadians()
将角度转换为弧度。

Practice Exercise 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ParameterUse {
public static void main(String[] args) {
int x = 0;
final int y = 1;
int[] z = {2};
final int[] w = {3};
useArgs(x, y, z, w);
}
static void useArgs(final int a, int b,
final int[] c, int[] d) {
// 输入到useArgs里的就看这个函数的参数就可以了,不用管xyzw
// a是final,所以a不能被改变,但是b可以,b可以被随意更改
a++; // Error
b++;
b=a;
//后面的三个,表示数组c或者d的地址不能改变,但是里面的内容可以改变
c[0]++; // Ok
d[0]++; // Ok
c=d; // Error
}
}

有关不可变类的理解

  不可变类(immutable class)是指当创建了这个类的实例后,就不允许修改它的值了,也就是说一个对象被创建以后,在整个生命周期内,它的成员变量就不能被修改了。有点类似与常量(const)不允许别的程序进行修改。
  Java类库中,所有基本类型的包装类都是不可变类(Byte、Boolean、Short、Char、Integer、Float、Long、Double),此外String也是不可变类。Object也是一个基本类型,他在java.lang.Object里面

1
2
3
4
5
String s = "Hello";

s += " World";

System.out.println(s);

运行结果是:Hello World
其实程序是在执行 s += “ World” 时创建了一个新的对象”Hello World”,s指向了这个新建的对象。原来的”Hello”字符串常量在内存中并没有被改变。

1
2
3
4
Integer a = 1;
Integer b = a;
b++;
System.out.print(a + " " + b);

运行结果:1 2
上面程序执行完 b++后,由于Integer是不可变类,因此会创建一个新值为2的Integer赋值给b,此时b和a已经没有任何关系。


参考文献

Java Number & Math 类
Java基本数据类型以及由不可变类带来的值传递和引用传递的难点分析
Java Object Api


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!