0x00 本系列-Java集训系列
记录我带领小组进行Java学习,按照《Java核心技术》第十版进行学习
0x01 从第三章开始内容变多,每次基本就一章
第三章
HelloWorld.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World" ); } }
先从第一个HelloWorld程序开始
Java区分大小写
文件名和类名一致,一般一个.java 文件里只有一个类,如果有多个类,其他的类可以不需要与文件名同名(类名不可以重复),并且不能用public 修饰类
类名的命名规则:名字必须以字母开头,后面可以跟字母和数字的任意组合,经测试可以使用下划线,名字长度无限制,不能使用Java保留字
如果需要运行,则需要一个main 方法,此方法为程序的入口点
类、方法、属性,都是有访问控制符,有public 、protected 、private 三种,后续章节会详细介绍
{}里的是代码段,Java中的任何方法的代码都要用”{“开始,用”}”结束,类也是如此
main里的代码作用是在控制台进行输出,调用的println 方法,此方法位于System.out 对象,调用对象的方法用. ,方法可以传参,也可以不传参,但是一定要由() ,里面的“Hello World” 就是传进去的参数,如果是多个参数,就用, 分隔,比如(“Hello”,”World”)
双斜线// 后面的是注释,//后面的都会被忽略,Java一共由三种注释,//、/* /、/* */,都在代码中可以看到用法
规则讲完,以下是运行此代码的方法:
首先进入命令行</>,进入java文件所在的目录(注:命令行在Windows下进入方式:win +r ,输入cmd ,点击确认;进入java文件所在目录:cd xxxx ,xxxx是java文件所在的目录,注意中间有个空格)
输入命令javac HelloWorld.java ,运行,会在本文件夹下生成一个HelloWOrld.class文件,如果报错请查看jdk安装是否正确,java文件是否正确
输入命令java HelloWorld ,运行,会看到输出结果,注意这里是HelloWorld ,而不是HelloWorld.class
DataType.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 public class DataType { public static void main (String[] args) { int intPrice0; intPrice0 = 2147483647 ; int intPrice1 = -2_147_483_648 ; short shortPrice0; shortPrice0 = 32767 ; short shortPrice1 = -32_768 ; long longPrice0; longPrice0 = 9223372036854775807L ; long longPrice1 = -9_223_372_036_854_775_808l ; byte bytePrice0; bytePrice0 = 127 ; byte bytePrice1 = -128 ; int intPrice2 = 0b1001 ; System.out.print("intPrice2=" ); System.out.println(intPrice2); int intPrice3 = 010 ; System.out.print("intPrice3=" ); System.out.println(intPrice3); int intPrice4 = 0xCAEF ; System.out.print("intPrice4=" ); System.out.println(intPrice4); float floatPrice0; floatPrice0 = 3.14F ; float floatPrice1 = -3.14f ; double doublePrice0; doublePrice0 = 3.14 ; double doublePrice1 = -3.14D ; double doublePrice2 = 33 /0.0 ; System.out.print("(正无穷)doublePrice2 = " ); System.out.println(doublePrice2); double doublePrice3 = (-33 )/0.0 ; System.out.print("(负无穷)doublePrice3 = " ); System.out.println(doublePrice3); double doublePrice4 = 0 /0.0 ; System.out.print("(NaN)doublePrice4 = " ); System.out.println(doublePrice4); System.out.println("doublePrice4 is NaN ? " + Double.isNaN(doublePrice4)); System.out.println("(Mistake)doublePrice4 is NaN ?" + (doublePrice4 == Double.NaN)); char charTest0 = 'A' ; System.out.println("charTest0 is " + charTest0); char charTest1 = '\u03C0' ; System.out.println("charTest1 is " + charTest1); boolean booleanValue0 = true ; boolean booleanValue1 = false ; int i; i = 1 ; int a = 2 ; int j,k,n,m; final int CONT_INT_PRICE = 30 ; final int CONT_INT_PP; CONT_INT_PP = 25 ; } }
Java共有8种基本类型,包括:4种整型(int,short,long,byte)、2种浮点类型(float,double)、1种char类型(char)、1种boolean类型(boolean)
String不属于基本类型
数据类型和变量常量的规则详见代码注释
Operator.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Operator { public static void main (String[] args) { int a = 5 ; int b = 2 ; System.out.println("5 + 2 = " + (a + b) ); System.out.println("5 - 2 = " + (a - b)); System.out.println("5 * 2 = " + (a * b)); System.out.println("5 / 2 = " + (a / b) ); System.out.println("5 % 2 = " + (a % b)); double x = 4 ; double y = Math.sqrt(x); System.out.println(y); double y2 = Math.pow(x, 3 ); System.out.println(y2); } }
四则运算这些没什么好说的,看代码就好。
TypeConversion.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class TypeConversion { public static void main (String[] args) { int n = 123456789 ; float f = n; System.out.println(f); System.out.println(n+f); double x = 9.997 ; int nx = (int )x; System.out.println(nx); int nx2 = (int )Math.round(x); System.out.println(nx2); } }
关于两个不同类型进行四则运算
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型
否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型
否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型
否则,两个操作数都将被转换为int类型
关于数值类型之间的合法转换
byte -> short
short -> int
char -> int
int -> long
int -> double
float -> double
int ~> float (此符号表示会丢失精度)
long ~> float
long ~> double
如果转换前的类型比转换后的类型大很多,就会造成转换之后的数字和转换之前的完全不同,比如(byte)300 = 44,以二进制进行截断,而不是以十进制进行截断
Operator2.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 public class Operator2 { public static void main (String[] args) { int x = 1 ; x += 4 ; x /= 4 ; x++; x--; boolean b_1 = (3 == 7 ); boolean b_2 = (3 != 7 ); boolean b_3 = (3 <= 7 ); boolean b_4 = (x != 0 ) && (x > 0 ); boolean b_5 = (x == 0 ) || (x < 0 ); boolean b_6 = !(x == 0 ); String result = (x != 0 )? "aaa" :"bbb" ; System.out.println(result); byte n = 127 ; int fourthBitFromRight = (n & 0b1000 ); System.out.println(fourthBitFromRight); int intUse0 = 8 ; int intUse1 = (intUse0 >> 2 ); System.out.print("intUse0 的二进制:" ); System.out.println(Integer.toBinaryString(intUse0)); System.out.print("intUse1 的二进制:" ); System.out.println(Integer.toBinaryString(intUse1)); int intUse2 = -128 ; int intUse3 = (intUse2 >> 3 ); System.out.print("intUse2 的二进制:" ); System.out.println(Integer.toBinaryString(intUse2)); System.out.print("intUse3 的二进制:" ); System.out.println(Integer.toBinaryString(intUse3)); int intUse4 = (intUse2 >>> 3 ); System.out.println(intUse4); System.out.print("intUse4 的二进制:" ); System.out.println(Integer.toBinaryString(intUse4)); int a1, b1, c1; a1 = 3 ; b1 = 5 ; c1 = 7 ; a1 += b1 += c1; int result1 = a1 + b1 - c1; } }
关于负数介绍点击这里 ,剩下的看代码
Strings.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 import java.io.IOException;import java.io.PrintWriter;import java.nio.file.Paths;import java.util.*;public class Strings { public static void main (String[] args) throws IOException { String e = "" ; String greeting = "HelloWorld" ; String s = greeting.substring(0 , 3 ); System.out.println(s); String expletive = "Expletive" ; String PG13 = "deleted" ; String message = expletive + PG13; System.out.println("message = " + message); int age = 13 ; String rating = "PG" + age; System.out.println("rating = " + rating); String all = String.join(" /" , "S" , "M" , "L" , "XL" ); System.out.println("all = " + all); greeting = "test" ; System.out.println("test" .equals(greeting)); System.out.println(greeting.equalsIgnoreCase("TEST" )); System.out.println(greeting == "test" ); if (e.length() == 0 ) { System.out.println("e is empty String" ); } if (e.equals("" )) { System.out.println("e allways is empty String" ); } String str = null ; if (str == null ) { System.out.println("str is null" ); } int n = greeting.length(); System.out.println(n); int cpCount = greeting.codePointCount(0 , greeting.length()); System.out.println(cpCount); char first = greeting.charAt(0 ); int i = 2 ; int index = greeting.offsetByCodePoints(0 , i); int cp = greeting.codePointAt(index); StringBuilder builder = new StringBuilder(); builder.append("abc" ); builder.append("def" ); System.out.println(builder); String completedString = builder.toString(); Scanner in = new Scanner(System.in); System.out.print("what is your name? " ); String name = in.nextLine(); System.out.println("Hello " + name); String firstName = in.next(); System.out.println(firstName); System.out.print("How old are you" ); int age1 = in.nextInt(); System.out.println("your age is " + age1); double x = 1000.0 /3.0 ; System.out.println(x); System.out.printf("%8.2f" , x); System.out.println(); System.out.printf("%,.2f" , 10000.0 /3.0 ); Scanner in1 = new Scanner(Paths.get("myfile.txt" ), "UTF-8" ); PrintWriter out = new PrintWriter("myfileout.txt" ,"UTF-8" ); out.print("test out" ); } }
由于API众多,这里只讲怎么用,就不繁琐的每个都列以下怎么用,用到的时候查询官方手册,总是一个好办法
ControlProcess.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 public class ControlProcess { public static void main (String[] args) { int n = 1 ; { int i = n + 2 ; } if (n == 1 ) { System.out.println("n == 1 ,会看到我" ); } if (n != 1 ) { System.out.println("跳过这条语句" ); }else { System.out.println("这个代码块会被执行" ); } if (n == 4 ) { System.out.println("n 是4" ); } else if (n == 2 ) { System.out.println("n 是2" ); } else if (n == 1 ) { System.out.println("猜对了" ); }else if (n == 1 ){ System.out.println("但是不会再看到我了" ); } else { System.out.println("上面都没捕获的就交给我处理" ); } int i = 0 ; while (n == 1 ) { System.out.println(n); i++; if (i > 10 ){ break ; } } do { System.out.println("不论判断的结果是什么,我都会先输出一次,之后就和上面的while没区别了" ); }while (n==2 ); for (int a = 0 ; a >10 ; a ++) { System.out.println(a); } switch (n) { case 1 : System.out.println("n 是 1 ,执行这里" ); break ; case 2 : System.out.println("如果不是上面的break,你就能看到我了" ); break ; case 3 : System.out.println("我要在上面两个break都没有的情况下才能看到" ); break ; default : System.out.println("如果上面都匹配不上,执行我就对了" ); break ; } } }
分为if,if else ,if else if else,while,for,switch,这些控制流程,都是很简单的结构,看看代码就知道了
BigNumber.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.math.BigInteger;public class BigNumber { public static void main (String[] args) { BigInteger a = BigInteger.valueOf(100 ); BigInteger b = BigInteger.valueOf(200 ); BigInteger c = a.add(b); BigInteger d = c.multiply(b.add(BigInteger.valueOf(2 ))); } }
略
Arrayst.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 import java.util.*;public class Arrayst { public static void main (String[] args) { int [] a; a = new int [100 ]; int [] b = new int [200 ]; a[10 ] = 100 ; System.out.println(a[10 ]); for (int i = 0 ; i < 100 ; i ++) { a[i] = i; } for (int i = 0 ; i < 100 ; i ++) { System.out.println(a[i]); } for (int a3 : a) { System.out.println(a3); } int [] lockyNumbers = a; a[0 ] = 123 ; System.out.println(lockyNumbers[0 ]); lockyNumbers = Arrays.copyOf(a, a.length); a[1 ] = 234 ; System.out.println(lockyNumbers[1 ]); Arrays.sort(a); int [][] magicSquare = { {16 , 3 , 2 , 13 }, {5 , 10 , 11 , 8 }, {9 , 6 , 7 , 12 }, {4 , 15 , 14 , 1 } }; for (int i = 0 ; i < magicSquare.length;i++) { for (int j =0 ; j < magicSquare[i].length; j++) { System.out.println(magicSquare[i][j]); } } } }
String[] str 就是字符串数组,里面没有写,但是应该清楚