lesson03
3.1 一个简单的Java程序
FirstSample.java
1 public class FirstSample { 2 public static void main(String[] args) { 3 System.out.println("We will not use 'Hello, World!'"); 4 } 5 }
程序解析
-
Java区分大小写
-
关键字public被称为访问修饰符(access modifier)控制访问级别
-
关键字class表示类,后面紧跟着类名,Java中的所有内容都在类中
-
源代码的文件名必须与公共类名字相同,并用.java作为扩展名
-
jvm将从指定类中的main方法开始执行(Java语言规范,main方法必须声明为public)
-
每条语句必须用分号结束
-
“.”点用于调用 Java的通用语法是:object.method(parameters)
3.2注释
-
//最常用的,从//开始到一行结尾
-
/* 和 */ 从 / *开始到 */结束(不能嵌套)
-
/** */ 这种注释可以用来自动生成文档
1 /** 2 *This is the first sample program in Core Java Chapter(章;阶段) 3 3 *@version 1.01 2022-07-12 4 *@author WenZheng 5 */ 6 public class FirstSample { 7 public static void main(String[] args) { 8 System.out.println("We will not use 'Hello, World!'");//输出语句 9 /* 10 可以用来注释一段语句 11 */ 12 } 13 }
3.3数据类型
Java是一种强类型语言。就是每个变量声明一种类型。Java中有8中基本类型(primitive type),4种整形、2种浮点、1种用于表示Unicode编码的字符单元的字符类型char、1种boolean类型。
!!浮点数值有舍入误差。例如(2.0-1.1)将打印0.8999999999999999,而不是0.9,是因为二进制无法精确的表示1/10,就像十进制无法精确的表示1/3一样,如果不想有舍入误差就需要用BigDecimal类。
3.4变量
在Java中变量的声明尽量靠近变量的第一次使用的地方。
常量(final)final关键字表示这个变量只能被赋值一次(习惯上常量都用大写)
类常量/变量:在main方法外声明;用public static关键字
3.5运算符
数值之间的转换会丢失精度,int–>float/long–>float/long–>double
类型不同进行运算会操作数转换成同一种类型进行运算,有double>float>long>int
强制类型转换:double a = 2.13; int b = (int) a; 会丢失一部分精度。
Math.round()返回的是long类型
枚举类型:
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
3.6字符串
“Hello”.substring(0, 3); 取字符串的子串。
Java中String类的对象成为不可变字符串,只可以让字符串变量引用另一个地址,而不能修改字符串中的字符。好处是可以共享字符串
1 "hello".equals("hello"); //比较字符串是否相等返回boolean 2 "hello".equalsIgnore("Hello");//比较字符串,忽略字母大小写 3 "hello".compareTo("hello"); //比较字符串是否相等返回int
构建字符串
1 StringBuilder builder = new StringBuilder(); 2 builder.append("ha");//需要添加一部内容就append 3 builder.append("ve"); 4 builder.append('.'); 5 builder.append(1); 6 7 //在需要构建字符串的时候就调用toString方法,将得到一个String对象,其中包含了构建其中的字符序列 8 String a = builder.toString();
3.7输入输出
输入需要构造一个Scanner对象
Scanner scanner = new Scanner(System.in);//创建Scanner对象 scanner.next();//从键盘输入以空格结束 scanner.nextLine();//以回车结束
读取密码使用
Console console = System.console(); String username = console.readLine("User name:"); char[] passwd = console.readPassword("PassWord:");
在idea中会读取cosole为null,需要在命令行中执行,并且需要在根目录下执行。
格式化输出
System.out.printf("%1$s %2$tB %2$te, %2$tY", "Date:", new Date()); //格式化字符串的索引必须跟在%后面以$结束,t是日期开头 System.out.printf("%s %tB %<te, %<tY", "Date:", new Date()); //<表示与前面格式说明中的参数将被在其使用
文件的输入与输出
1 //想要对文件进行读取就需要有个用File对象构造一个Scanner对象 2 Scanner in = new Scanner(Paths.get("myFile.txt"), "UTF-8");//Paths.get得到路径 3 //也可以这样 4 File file = new File("myFile.txt"); 5 Scanner inputF = new Scanner(file); 6 7 Scanner scanner = new Scanner("myFile.txt");//Scanner会把路径当成字符串处理 8 9 String dir = System.getProperty("user.dir");//得到启动路径 10 //写入文件,如果该文件不存在,创建该文件。可以像输出到sytem.out一样使用print/println/printf 11 PrintWriter out = new PrintWriter("myfile.txt", "UTF-8");
3.8控制流程(跳过)
3.9大数值
如果基本类型不能满足需求,可以使用java.math包中的BigInteger和BigDecimal
BigInteger类实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点数运算。
使用valueOf方法可以将普通的数值转换为大数值:
BigInteger a = BigInteger.valueOf(10000);
大数值不能用运算符处理,需要用类中的方法:
BigInteger c = a.add(b); //c = a + b BigInteger d = c.multiply(b); // d = c * b
3.10数组
求数组元素个数
int[] array = {1,2,3,4,5,6,7,8,9,0,1,2}; System.out.println(array.length);
for each循环(增强的faor循环)
int[] array = {1,2,3,4,5,6,7,8,9,0,1,2}; for (int s: array) { //遍历数组不需要在意下标 System.out.print(s); }
数组排序:
Arrays.sort(red); //sort方法可以对数组排序
二维数组:
1 int[][] doubleArray1 = {{1,2,3},{2,3,4},{3,4,5}}; 2 3 for (int[] s : doubleArray1) { 4 for (int b : s) { 5 System.out.print(b); 6 } 7 System.out.print(" "); 8 } 9 //deepToString打印二维数组 10 System.out.println(Arrays.deepToString(doubleArray1));
Java其实没有多维数组,只有一维数组,多维数组被称为数组的数组,它们的存储方式是这样的:
所以可以创建不规整数组
##重点(值传递,引用传递)
int[] array = new int[12]; int[] next = array; //传递的是一个引用,现在next和array指向的是同一个内存 next[3] = 13; //现在array[3] 也等于 13;
如果想要将一个数组的所有只拷贝到一个新的数组中去就需要使用Arrays类的copyOf方法:
int[] newArray = Arrays.copyOf(array, array.length);
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/274097.html