-
java的11个特性:简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、多态性。
-
在使用命令行工具来来运行java程序时,先要用终端进入文件目录.然后使用java xxx.java;javac xxx即可。
-
关键字public private等称为访问修饰符(access modifier)
-
类名是以大写字母开头名词。如果名字由多个名词组成,每个单词的第一个字母都应该大写。这种命名法为骆驼命名法(camel case)。
-
java中共有8种基本类型(primitive type),其中共有4种整型、2种浮点类型、一种字符类型char、和boolean类型。
-
整形有4种类型
类型 存储需求 int 4字节 short 2字节 long 8字节 byte 1字节 -
java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
-
长整型数值有一个L或l(如40000000000L)。十六进制有一个前缀0x或0X。八进制前缀为0,例如010代表8。加前缀0b或0B可以写二进制数。用下划线1_000_000只是为了让人容易读,编译器会去除。
System.out.println(010);
以上述程序为例,输出为8。
-
java没有任何无符号(unsigned)形式的int,long,short,byte类型。
-
Byte.unsignedInt(b)可以得到一个0-255的int值。Integer和Long类都提供了处理无符号除法和余数的方法。
-
浮点类型有两种
类型 存储需求 取值范围 float 4字节 有效位数6-7位 double 8字节 有效位数15位 float类型的数值有一个后缀F或f。没有后缀的浮点数总是默认为double类型。也可以在浮点数值后加后缀D或d。
-
16进制表示浮点数值时,0.125=2^-3可以表示位0x1.0p-3。在十六进制表示法中,使用p表示指数。尾数采用16进制,指数采用十进制。指数的基数为2。
-
所有的浮点数值都遵循IEEE754规范。常量Double.POSITIVE_INFINITY,DOUBLE.NEGATIVE_INFINITY,DOUBLE.NAN分别表示正无穷大、负无穷大、不是一个数字。判断一个特定值是否是Double.NAN时,不能用==。而是判断if Double.isNaN(x)。
-
浮点运算不适用于无法接受舍入误差的计算。这种计算应使用BigDicamal类。
-
/u表示转义序列。
转义序列 名称 unicode值 /b 退格 /u0008 /t 制表 /u0009 /n 换行 /u000a /r 回车 /u000d “ 双引号 /u0022 ‘ 单引号 /u0027 / 反斜杠 /u005c -
unicode和char类型见书P33
-
使用关键字final指示常量,习惯上常量全大写。
-
static final设置类常量
-
用public修饰类变量时,其他类的方法也可以使用这个常量。如Math.PI。
-
枚举类型enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE},Size s=Size.MEDIUM
-
使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可生成的结果。
-
取余运算在计算商值向0方向舍弃小数位
-
取模运算在计算商值向负无穷方向舍弃小数位
-
比如a=4,b=-3时,a/b = -1.3333…
-
此时,取余c = -1,取模c = -2(%在不同语言中有不同的意义,比如Java或者c/c++中%为取余,python中%则为取模)
-
java中的floorMod()为取模运算。
-
强制类型转换通过截断小数部分将浮点值转换为整型。对浮点数采用舍入运算需要使用Math.round()方法.round返回值为long类型
-
位运算符有&(and) |(or) ^(xor ) ~ (not). >> <<可以将位模式左移或右移。
-
String类的subString可以从较大的字符串中提取一个子串。
-
java允许使用+号连接两个字符串,当一个字符串和一个非字符串进行拼接时,后者会转换为字符串。
-
如果需要把多个字符串放在一起,可以使用静态join方法:
String all=String.join("/","s","m","l","xl");//all is the string "s/m/l/xl"
-
repeat方法
String repeated="Java".repeat(3);//repeated is "JavaJavaJava"
-
Java字符串中的单一字符不能修改,所以在Java文档中将String类对象称其为时不可变的(immutable)。
-
使用equals方法来比较两个字符串是否相等,采用==来判断是不正确的。想检测两个字符串是否相等而不区分大小写可以使用equalsIgnoreCase方法。
-
空串和null串的区别在于:空串是一个已经实例化的对象,具有内存空间。null串是没有实例化的对象,不占内存空间。空串可以调用属性、方法,null串会报错(NullPointerException)。
-
length方法返回的是采用UTF-16编码表示给定字符字符串所需要的代码单元数量。
-
得到码点数量可以调用codePointCount方法。
int count=s.codePointCount(0,s.length());
-
charAt方法返回位置n的代码单元。因为UTF-16编码部分字符需要两个代码单元,所以使用charAt时会出错。
-
使用codePointAt返回第i个码点。
-
要遍历一个字符串并且以此查看每一个码点
int cp=sentence.codePointAt(i); if(Character.isSupplementaryCodePoint(cp)) i+=2; else i++;
也可以将它转换为一个数组再完成遍历。
int [] codePoints=str.codePoints().toArray();
-
使用StringBuilder类来解决字符串多次拼接。
StringBuilder builder=new StringBuilder(); //append方法用于添加内容 builder.append(ch);//添加字符 builder.append(str);//添加字符串 String completeString=builder.toString();//最后得到完成的字符串
-
标准输入流System.in,标准输出流System.out。Scanner对象可关联标准输入流。
Scanner in=new Scanner(System.in);
-
nextLine方法用于读取一行输入。next用于读取一个单词。nextInt用于读取下一个整数。nextDouble用于读取下一个浮点数。
String s1=in.nextLine(); String s2=in.next(); int x=in.nextInt(); double y=in.nextDouble();
-
Scanner类定义在java.util包内、要通过import导入包。
-
要读取密码时
Console cons=System.console(); String username=cons.readLine("User name: "); char[] passwd=cons.readPassword("Password: ");
采用console对象来处理输入时,必须每次读取一行输入,没有能够读取单个单词或数值的方法。
-
printf方法和c一样,可以格式化输出。转换符见P58。
-
String.format方法可以创建一个格式化的字符串。转换符见P59,60。
-
读取一个文件时需要构造一个Scanner对象
Scanner in=new Scanner(Path.of("xxxx"),StandardCharsets.UTF_8);//XXXX为文件地址。字符编码并不是普遍适用,要具体看文本文件。
-
要写入一个文件需要构造一个PrintWriter对象。
PrintWriter out=new PrintWriter("xxxx",StandardCharsets)
如果文件不存在,创建该文件。
-
switch case标签可以是类型为char,byte,short,int的常量表达式,可以是枚举常量,可以是字符串字面量。
-
带标签的break语句可以跳出多重嵌套的循环语句,普通break语句只能跳出一种循环。
read_data: while(...) { ... for(...) { if(..) { break read data;//直接跳出read_data循环 } } }
标签可以应用到任何语句,包括if语句和块语句。
-
continue语句将控制转移到最内层循环的首部。简单来说就是跳过最内层循环的一次循环continue后的代码
-
使用BigInteger和BigDecimal这两个类可以处理包含任意长度数字序列的数组。
-
使用valueof方法可以将普通的数转换为大数
BigInteger a=BigInteger.valueof(100); BigInteger b=new BigInteger("312313516534654564531321564684");//对于更大的数,可以使用带字符串参数的构造器
BigInteger.ZERO,BigInteger.ONE等为一些常量。
-
使用add,multiply,divide表示+,*,/。
-
int [] a;只是声明一个变量,要初始化需要使用new操作符。
-
for each循环格式为for (variable:collection) statement。例如
for(int element:a){}
-
调用Arrays.toString(a)可以返回一个包含数组元素的字符串,这些元素包围在中括号内,并用逗号分隔。
-
使用Arrays类的CopyOf方法可以将一个数组的所有值拷贝到一个新的数组中去。
int []copiedLuckyNumbers=Arrays.copyOf(luckyNumbers,luckyNumbers.length) //第二个参数是新数组的长度 luckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbers.length) //该方法可用来增加数组的大小
-
main方法接受一个字符串数组args,也就是在命令行上的指定的参数。
-
Arrays.sort(a)可以对数值型数组进行排序。排序方法为优化的快速排序算法。
-
for each循环语句不能自动处理二维数组的每一个元素,需要使用两个嵌套的循环
for(double[] row:a) for(double value:row) do something with value
使用Arrays.deepToString(a)可以快速打印一个二维数组。
-
java实际上并没有多维数组只有一维数组,多维数组是数组的数组,也就是一维数组的元素为数组。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/287298.html