3.1 一个简单的Java应用程序
public classFirstSample {public static voidmain(String[] args) {
System.out.println("We will not use 'Hello World'");
}
}
Java对大小写敏感。
关键词public,访问修饰符。
关键词class,类。
类名FirstSample,必须以字母开头,骆驼命名法。
源文件以.java作为扩展名。
每个Java程序都必须有一个main方法。
{ }一对花括号表示方法体的开始与结束。
.号用于点用方法。
3.2 注释
Java中,有三种书写注释的方式。
最常见的是使用//,其注释内容为从//开始到本行结尾。
System.out.println("We will not use 'Hello World'"); //is this too cure?
当需要长篇注释时,既可以在每行的注释前面标记//,也可以用/* 和 */将一段比较长的注释括起来。
第三种注释可以用来自动地生成文档。这种注释以/**开头,以*/结束:
/*** this is first program in this chapter
*@version1.1 2020-04-20
*@authorayor*/
3.3 数据类型
Java是一种强类型语言,必须为每一个变量声明一种类型。在Java中,一共有8种基本类型,其中有4种整型,2种浮点,1种用于表示unicode编码的字符单元的字符类型char和一种表示真值的boolean类型。
3.3.1 整型
int 4字节,short 2字节,long 8字节,byte 1字节。
长整型后缀L, 十六进制数值前缀0x,八进制前缀0,二进制前缀0b。
3.3.2 浮点类型
float 4字节 有效数值精度6~7位,double 8字节,有效数值精度15位。
double 表示的数值精度是float的两倍,绝大多数应用程序采用double类型。
float类型后面有一个后缀F,double类型也可以后缀D,没有F后缀默认为double类型。
3.3.3 char类型
char类型用于表示单个字符。通常用于表示字符常量。
转义序列符号 \u, 可以出现在字符常量或字符串的引号之外,其他转义序列不可以。
\b 退格;\t 制表;\n 换行;\r 回车;
Java中,char类型用utf-16编码描述一个代码单元。
3.3.4 boolean类型。
布尔类型有两个值,true 和 false。
3.4 变量
Java 中,每一个变量属于一种类型type。
doublesalary;intvacationDays;longearthPopulation;boolean done;
3.4.1 变量初始化
未被初始化的变量不能使用。
intvacationDays;
vacationDays= 12;int vacationDays = 12;
3.4.2 常量
在Java中,利用关键字final指示常量。
final double CM_PER_INCH = 2.53;
final表示这个变量只能被赋值一次,一旦被赋值之后,就不能够再改变了。习惯上,常量名使用全大写。
在Java中,希望某个常量在一个类的多个方法中使用,称之为类常量。
public static final double CM_PER_INCH = 2.54;
类常量的定义位于main方法的外部,而且一个常量被声明为public,其他类的方法也可以使用这个常量。
3.5 运算符
算数运算符 +、-、x、/,整数求余操作%。
x += 4, 等价于 x = x + 4。
3.5.1 自增运算符与自减运算符
n++, n--,++n,--n。
3.5.2 关系运算符与boolean运算符。
==;!=;< ; >; >=; <=;
&& 与;|| 或;!非。
三元运算符,x < y ? x : y。
3.5.3 位运算符
3.5.4 数学函数与常量
Math类三角函数,反函数,平方根函数sqrt方法。
3.5.5 数值类型之间的转换
无信息损失的转换——byte-short-int-long(double)
3.5.6 强制类型转换
强制类型转换 cast
double x = 9.99;int nx = int(x);
得到的变量值为9。
为得到最接近的整数,需要使用Math.round方法:
double x = 9.997;int nx = (int)Math.round(x);
nx的值为10。
3.5.7 括号与运算符级别
如果不使用圆括号,就按照给出的符号运算符优先级次序进行运算,同一级别的运算符按照从左到右的次序进行计算。除了右结合运算符之外。
3.5.8 枚举类型
变量的取值只在有限的集合内。
enumSize {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size a= Size.MEDIUM;
3.6 字符串
从概念上讲,字符串就是Unicode字符序列。
Java并没有内置字符串类型,而是在标准类库提供了一个预定义类,很自然叫做String。每个用双引号括起来的字符串都是String类的一个实例。
3.6.1 子串
String greeting = "Hello";
String s= greeting.substring(0,3);
3.6.2 拼接
String expletive = "Expletive";
String PG13= "deleted";
String message= expletive + PG13;
将一个字符串与一个非字符串的值进行拼接时,后者被转化为字符串。
3.6.3 不可变字符串
编译器可以将字符串共享。共享优先于提取,拼接。
3.6.4 检测字符串是否相等
s.equals(t);
"hello".equals(greeting);
3.6.5 空串与null串
空串是一个Java字符串对象,长度为0,内容为空。
null串表示,没有对象与该变量关联。
if (str.length() == 0);if (str.equals("");if(str == null));if (str != null && str.leng() != 0);
3.6.6 代码点与代码单元
length方法返回采用utf-16编码表示的给定字符串的代码单元数量。
3.6.7 字符串api
Java的String类包含了50多种方法。
3.6.8 阅读联机api 文档
3.6.9 构建字符串
StringBuilder builder = newStringBuilder();
builder.append(ch);
builder.append(str);
String completeString= builder.toString();
3.7 输入与输出
3.7.1 读取输入
importjava.util.Scanner;public classInputTest {public static voidmain(String[] args) {
Scanner in= newScanner(System.in);
System.out.println("what is your name?");
String name=in.nextLine();
System.out.println("How old are you?");int age =in.nextInt();
System.out.println("My name is " + name + " and my age is " + age +"。");
}
}
3.7.2 格式化输出
3.7.3 文件的输入与输出
Scanner = new Scanner(Paths.get("myfile.txt));
PrintWriter out= new PrintWriter("myfile.txt);
读入文件可能导致异常,需要抛出FileNotFoundException。
3.8 控制流程
3.8.1 块作用域
块,指由一对花括号括起来的若干条简单的Java语句。一个块可以嵌套到另外一个块当中去。但是,不能在嵌套到两个块当中声明同名的变量。
3.8.2 条件语句
if(condition)statement;
if(condition)statement1 else statement2;
3.8.3 循环
while(condition)statement;
do statement while(condition);
importjava.util.Scanner;public classRetirement {public static voidmain(String[] args) {
Scanner in= newScanner(System.in);
System.out.print("How much money do u need to retirement?");double goal =in.nextDouble();
System.out.print("How much money do u contribute every year?");double payment =in.nextDouble();
System.out.print("Interest rate in %: ");double interestRate =in.nextDouble();double balance = 0;int years = 0;while (balance
balance+=payment;double interest = balance * interestRate / 100;
balance+=interest;
years++;
}
System.out.println("You can retire in " + years + "years.");
}
}
importjava.util.Scanner;public classRetirement2 {public static voidmain(String[] args) {
Scanner in= newScanner(System.in);
System.out.print("How much money will you contribute every year?");double payment =in.nextDouble();
System.out.print("Interest rate in %: ");double interestRate =in.nextDouble();double balance = 0;int year = 0;
String input;do{
balance+=payment;double interest = balance * interestRate / 100;
balance+=interest;
year++;
System.out.printf("After year %d, your balance is %,2f%n", year, balance);
System.out.print("Ready to retire?(Y/N)");
input=in.next();
}while (input.equals("N"));
}
}
3.8.4 确定循环
importjava.util.Scanner;public classLotteryOdds {public static voidmain(String[] args) {
Scanner in= newScanner(System.in);
System.out.print("How many number do you want to draw?");int k =in.nextInt();
System.out.print("what is the highest number can you draw");int n =in.nextInt();int lotteryOdds = 1;for (int i = 1; i <= k; i++) {
lotteryOdds= lotteryOdds * (n - i + 1) /i;
}
System.out.println("Your odds are 1 in " + lotteryOdds + ". Good Luck!");
}
}
3.8.5 多重选择switch语句
switch case break default;
3.8.6 中断控制流语句
break 退出循环语句;
带标签的break 语句,跳出多层嵌套; break read_data;
contine 返回到最内层循环到顶层。
3.9 大数值
如果基本的整型和浮点类型都不能够满足需求,可以用Java.math包里面的两个很有用的类:BigInteger和BigDecimal。可以实现任意精度的整型和浮点的运算。
BigInteger a = BigInteger.valueof(100);
BigInteger c=a.add(b);
BigInteger d= c.multiply(b.add(Biginteger.valueof(2)));
3.10 数组
int[] a;int[] a = new int[100];for(int i = 0, i < 100 , i++)
a[i]= i;
3.10.1 foreach循环
for(intelement : a)
System.out.println(element);
3.10.2 数组初始化以及匿名数组
int[] smallPrimes = {2, 3, 5, 7, 11, 13};new int[] {1, 3, 5, 7, 9};
samllPrimes= new int[] {1 ,2 ,3 ,4 ,5};int[] anonymous = {2, 4, 6, 9, 12};
smallPrimes= anonymous;
3.10.3 数组拷贝
int[] copied = Arrays.copyof(luckyNumbers, luckyNumer.length);
这个方法通常用来增加数组的长度
int[] copied = Arrays.copyof(luckyNumbers, 2 * luckyNumer.length);
3.10.4 命令行参数
public classMessage {public static voidmain(String[] args) {if (args[0].equals("-h"))
System.out.print("Hello, ");else if (args[0].equals("-g"))
System.out.print("Goodbye, ");for (int i = 1; i < args.length; i++)
System.out.print(" " +args[i]);
System.out.println("!");
}
}
3.10.5 数组排序
int[] a = new int[10000];
Arrays.sort(a);
3.10.6 多维数组
多维数组将采用多个下标访问数组元素,它适用于表示表格或者更加复杂的排列形式。
3.10.7 不规则数组
Java其实没有多维数组,只有一维数组,多维数组是“数组的数组”。