本笔记是摘与Hava白皮书上面的内容,用来给自己做提醒的,因此大概并不适合Java的学习者作为笔记参考使用。
以我的水平现在还看不懂这个。。。
一。基础知识篇
1.常量
final关键字指示常量,只能够被赋值一次。习惯上,常量名使用全大写。
final double n=10;
1.1 类常量
在Java中,希望某个常量可以在一个类的多个方法中使用。可以使用关键字static final设置一个类常量。
例如:
public cl ass Constants〗
{
public static final double CM_PER_INCH = 2.54;//定义在main方法外部
public static void main(Stringn args)
{
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CMJERJNCH + by " + paperHeight * CM_PER_INCH) ;
}
}
1.2.数学函数与常量
1.2.1 计算平方根 Math.squart(x)
1.2.2 在Java 中,没有幂运算, 因此需要借助于Math 类的pow 方法。语句:
double y = Math.pow(x, a) ;
将y 的值设置为x 的a 次幂( xa)。pow 方法有两个double 类型的参数, 其返回结果也为
double 类型。
1.2.3
Math 类提供了一些常用的三角函数:
Math,sin
Math.cos
Math.tan
Math.atan
Math.atan2
还有指数函数以及它的反函数—自然对数以及以10 为底的对数:
Math.exp
Math.log
Math.loglO
最后,Java 还提供了两个用于表示TC 和e 常量的近似值:
Math.PI
Math.E
1.3.1数值类型之间的转换
虚箭头会丢失精度
1.3.2 强制类型转换
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变
量名。例如:
1 double x * 9.997; 2 int nx = (int) x;
这样, 变量nx 的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。
如果想对浮点数进行舍人运算, 以便得到最接近的整数(在很多情况下, 这种操作更有
用),
那就需要使用Math_round 方法:
double x z 9.997;
int nx = (int) Math.round(x);
现在, 变量nx 的值为10。当调用round 的时候, 仍然需要使用强制类型转换( int)。其原因
是round 方法返回的结果为long 类型,由于存在信息丢失的可能性, 所以只有使用显式的强
制类型转换才能够将long 类型转换成int 类型。
1.3.3
1.3.4 枚举类型
枚举类型包括有限个命名的值。
有关枚举类型的详细内容将在第五章中介绍。
二、字符串
String
2.1 子串
String类的substring方法可以从一个较大的字符串中提取出一个子串。
例如:
String greeting = "Hello";
String s = greeting.substring(0,3)
创建了一个由字符“ Hel” 组成的字符串。
substring 方法的第二个参数是不想复制的第一个位置。这里要复制位置为0、1 和2 ( 从
0 到2, 包括0 和2 ) 的字符。在substring 中从0 开始计数,直到3 为止, 但不包含3。
2.2 拼接
Java中的String类允许使用 + 号拼接两个字符串。
这种特性通常用在输出语句中。
如果需要把多个字符串放在一起, 用一个定界符分隔,可以使用静态join 方法:
String all = String.join(" ~ ", "S", "M", "L", "XL");
// all is the string "S ~ H ~ L ~ XL"
2.3 不可变字符串
String 类没有提供用于修改字符串的方法6 如果希望将greeting 的内容修改为“ Help!”,
不能直接地将greeting的最后两个位置的字符修改为‘ p ’ 和‘、! 这对于C程序员来说,
将会感到无从下手。如何修改这个字符串呢?
在Java 中实现这项操作非常容易。首先提取需
要的字符, 然后再拼接上替换的字符串:
greeting = greeting.substring(0, 3) + "p!";
上面这条语句将greeting 当前值修改为“ Help ! ”
由于不能修改Java 字符串中的字符, 所以在Java 文档中将String 类对象称为不可变字
符串, 如同数字3 永远是数字3—样,字符串“ Hello” 永远包含字符H、e、1、1 和o 的代
码单元序列, 而不能修改其中的任何一个字符。当然, 可以修改字符串变量greeting, 让它
引用另外一个字符串, 这就如同可以将存放3 的数值变量改成存放4 一样
2.4 检测字符串是否相等
可以使用equals 方法检测两个字符串是否相等。对于表达式:
s.equal s(t)
如果字符串s 与字符串t 相等, 则返回true ; 否则, 返回false。需要注意,s 与t 可以是字符
串变量, 也可以是字符串字面量。例如, 下列表达式是合法的:
"Hello".equals(greeting)
要想检测两个字符串是否相等,而不区分大小写, 可以使用equalsIgnoreCase 方法。
"Hello".equalsIgnoreCase("hel1o")
一定不要使用=运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串
是否放置在同一个位置上。
2.5 空串与null串
空串"" 是长度为0 的字符串。可以调用以下代码检查一个字符串是否为空:
if (str.length() = 0)
或
if (str.equals(""))
空串是一个Java 对象, 有自己的串长度( 0 ) 和内容(空)。不过, String 变量还可以存
放一个特殊的值, 名为null , 这表示目前没有任何对象与该变量关联(关于null 的更多信息
请参见第4 章)。要检查一个字符串是否为null , 要使用以下条件:
if (str == null)
2.6 码点和代码单元
待补充知识空缺。可以单独开一个随笔说。
好像大体是说,代码单元可能不准确,而码点比较准确。
3.Java中如果整数和浮点数的精度不够使,那么可以使用java.math包中的两个很有用的类:BigInteger计二BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了人已经度的整数运算,BigDecimal实现任意精度的浮点数运算。
BigInteger a = BigInteger.valueOf(100);//value of方法将100转换成大数 BigInteger b = BigInteger.valueOf(10); BigInteger c = a.add(b);//加法 System.out.println(c); BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//乘法 System.out.println(d);
剩下的用法可以查找Java的API文档。
4.数组
4.1 数组的声明和初始化
int[] aa;//声明了变量a 但并没有将a初始化为一个真正的数组 aa=new int[100];//初始化了
int[] hh=new int[10];
并且,数组的长度并不要求是常量。可以创建new int[ n ] 其中n为变量。
创建一个数字数组时, 所有元素都初始化为0。boolean 数组的元素会初始化为false 对
象数组的元素则初始化为一个特殊值null , 这表示这些元素(还)未存放任何对象。初学者
对此可能有些不解。例如,
String[] names = new String[10] ;
会创建一个包含10 个字符串的数组, 所有字符串都为null。如果希望这个数组包含空
串, 可以为元素指定空串:就是遍历一遍,每个赋值为一个空格。
要想获得数组中的元素个数,可以使用array.length,例如:
4.2 for each 循环
int[] aa;// aa=new int[100]; for(int i=0;i<aa.length;i++) aa[i]=i+1; for(int element :aa) System.out.println(element);//这个就是for each循环
这个循环读作“循环a中的每一个元素”。打印的每一个元素都占一行。当然传统的for循环也是可以得到结果的,但是这个for each循环语句显得更加简洁、不宜出错。(不必为下表的起始值和中止值操心)。
int[] aa;// aa=new int[100]; for(int i=0;i<aa.length;i++) aa[i]=i+1; //Arrays.toString(aa); System.out.println(Arrays.toString(aa));
4.3 数组初始化以及匿名数组
int[] a= {1,2,3,4,5,5,5,5,5};//允许不初始化长度 for(int e :a) System.out.println(e); System.out.println("after:"); a=new int[] {1,1,1,1,1,1,1};//等于号后面这个叫做匿名数组 for(int e: a) System.out.println(e);
在这里,只要暂且记住这个用法就可以了。在后面应该才会得到应用。现在还不是特别懂。
4.4数组的拷贝:
int[] a= {1,2,3,4,5,5,5,5,5}; int[] b= {2,2,2,2,2,2,2}; System.out.println(a); System.out.println(b); System.out.println(); a=b;//这样是允许的 但是打印的地址说明,这样只是把a和b指向的地址统一了而已,实际上还是指向同一个数组 System.out.println(a); System.out.println(b);
想要拷贝数组,也就是两个数组指向两个地址的,那么用这个:
int[] aa=Arrays.copyOf(a,a.length);
第二个参数是新数组的长度,通常用来增加数组的大小:
int[] aa=Arrays.copyOf(a,2*a.length);
上面的这句,如果数组元素是数值型,那么多余的元素将被赋值为0;若是布尔型,将被赋值为false.....
Java与c++的不同之处见上图
4.5