文章目录
javalearn-0
Java核心技术.卷I(第11版)
第3章:基本程序设计结构
1.总体过程:
Hello.java
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
编译、运行
javac Hello.java
java Hello
javac程序是一个编译器,将Hello.java编译成Hello.class;(java代码由编译器编译成字节玛)
java程序启动虚拟机,虚拟机执行字节码。(字节码转为机器码)。
2.java数据类型:
整型4种、浮点型2种、字符型1种、真值型1种
-
整型
- int:4字节、正负20亿( 2 31 − 1 2^{31}-1 231−1)
- short:2字节、-32768-32767( 2 16 − 1 2^{16}-1 216−1)
- long:8字节
- byte:1字节
没有无符号(unsigned)形式,使用他们的类(Byte,Long,Integer)可以处理
-
浮点型
- float:4字节、小数位有效位6-7位
- double:8字节、小数位有效位15位
浮点数默认为double,可以使用后缀
f
或F
跟在数字后面表示是float类型。也有d
或D
浮点计算不精确,必要时使用
BigDecimal
类,如和钱相关的数据 -
字符型
-
char:表示单个字符,中文需要2个字符
十六进制表示:
\u0000-\uFFFF
;\u
是转义序列,后面跟4个十六进制数其他转移序列:
\b
:退格\t
:制表\n
:换行\r
:回车\"
:双引号\'
:单引号\\
:反斜杠
这些转义字符会在解析代码前先被处理,转成字符
建议不在程序中使用char类型,除非处理UTF-16。在Java中,char与UTF-16对应
-
-
真值型
- boolean
3.变量和常量:
常规规则:
-
一般开头大写用作类
-
变量用驼峰命名法,首字母小写
-
常量用全大写
变量:
- 变量的声明与初始化
- 声明:
类型 变量名;
- 初始化:
变量名 = 值;
- 写成一行:
类型 变量名 = 值;
- 声明:
常量:
// 格式
final 类型 常量名 = 值;
// 示例
final double PI = 3.14;
fianl
关键字修饰的变量。只能赋值一次,就不能再改变了。
常量类(class constant):
存储常量,便于被其他类调用。
public class Constant{
public static final PI = 3.14;
psvm...
}
枚举类型:
使用关键字enum
。
enum Size {SMALL, MEDIUM, LARGE};
Size s = Size.MEDIUM;
4.运算符:
自增、自减:
int a = 1;
int b = 1;
int c = 2 * ++a;
int d = 2 * b++;
前缀形式:表示变量先自增或自减,再做运算
后缀形似:表示变量先使用原来的值做运算,再自增或自减
不建议写在表达式中
三元操作符:
condition ? expression1 : expression2;
条件为真时返回第一个表达式,否则返回第二个表达式。
&&(与)、||(或)
多个条件(操作数)并列时,采用“短路”方式,如果通过第一个操作数就能判断,那后面的就不会执行了
位运算符:
&(and), |(or), ^(xor), ~(not), >>(左移), <<(右移)
5.字符串:
字符串使用预设类String
来声明,是不可变的,所有的字符串会存储到虚拟机的一个共享池中,编译器使这些字符串共享。
字符串比较
使用.equals()
方法,不能使用==
。==
比较的是两个字符串的存储地址。相同字符串的副本完全可能存在不同位置。
空字符串""
和 null
""
长度为0
null 内容为空
if (str != null && str.length()!=0){
...
}//必须先判断是否为null,否则可能`null.length()`,这样会报错
String、StringBuilder、StringBuffer
。。。
6.输入、输出:
输入:构建与标准输入流System.in
关联的Scanner
对象
Scanner in = new Scanner(System.in);
String name = in.nextLine();//读取一行
int age = in.nextInt();//读取一个整数
String firstName = in.next();//读取一个单词(空格为分隔符)
//读取密码
Console cons = System.console();
String usr = cons.readLine("user name:");
char[] psw = cons.readPassword("password:");//安全起见,用完后覆盖这个字符数组
输出:
一些格式化输出
7.控制流程:
-
分支
-
if (con){} else{}
-
if(){} else if(){} else{}
-
switch(var){ case con1: ... break; case con2: ... break; default: ... break; }//con1的类型可以是char,byte,short,int,enum常量,String(java 7开始支持)
-
-
循环
-
for(int i,i<100,i++){}
for(var:collection)statement //foreach 遍历集合元素,不用管下标
-
while(con){}
-
do{}while(con)
-
-
顺序执行
-
statement1; statement2; ...
-
8.break continue
break;//在循环中,跳出循环
break_data:
while(con){
...
for(con1){
if(con2){
break break_data;//带标签变量,可以直接跳到标签处。
//这里直接跳出多层循环
}
}
}
continue;//在循环中,跳过当前要执行的,进入下一次循环
这不是必备的
9.BigDecimal BigInteger
BigDecimal:任意精度的浮点运算
BigInteger:任意精度的整数运算
运算时,不能直接使用算术运算符,需要调用add()
、mutiply()
等大数类的方法
10.数组
创建一维数组:
int[] a = new int[100]; //声明并初始化一个长度为100长的整型数组
int a[] = new int[100]; //等价于上一句,变量名都是a
int[] s = {2,3,4,5,}; //会自动统计数组个数并填入值
new int[] {1,2,3,};//声明一个匿名数组
int[] r = new int[] {1,2,3,};
//长度为0的数组,不等于null
new elementType[0];
new elementType[] {};
数组一旦创建,长度不可再变。
如果需要扩展,可以使用数组列表(arrary list)
创建二维数组:
double[][] b = new double[NYear][NMonth];
二维数组本质上是一维数组里再放了一维数组,即数组的数组。
因此,控制NMonth
在不同行的值,就可以构建一个不规则的二维数组,如
//构建一个下三角函数
//先分配行,再分配每行的元素个数
int[][] odds = new int[MAX+1][];
for(int n = 0; n<=MAX;n++){
odds[n] = new int[n+1];
}
11.命令行参数
public static void main(String[] args){
for(arg:args){
System.out.println(arg)
}
}
args从命令行中接收参数
java demo -g hello world
则:
args[0]:"-g"
args[1]:"hello"
args[2]:"world"