前言
本文是结合《Java程序设计》(黄岚、王岩、王康平)的摘要与上课ppt的笔记。
- Java采用Unicode字符集表示标识符
- Unicode采用16-bit存储格式
2.结构化程序设计基础
2.1 标识符、关键字和数据类型
2.1.1 标识符
- Java标识符以数字、字母、下划线(_)和美元$组成
- 首位不能是数字
- 区分大小写
- 关键字不可做为标识符
ctrl+shift+f 格式化
转义字符表:
转义字符 | 名称 | 作用 |
---|---|---|
\b | 退格 | |
\t | 水平制表 | 相当于按Tab键(自动换行) |
\n | 换行 | 换到当前位置的下一行,而不会回到行首 |
\r | 回车 | 回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖 |
\" | 双引号 | |
\’ | 单引号 | |
\\ | 反斜线 |
【例2.1:显示转义字符示例】
public class san316 {
public static void main(String[] args) {
System.out.print("1");//接入数字是为了看起方便
System.out.println("2");
System.out.print("\r\n3");
System.out.print("\"4");
System.out.print("\t5");
System.out.print("\'6");
System.out.println("");//表示打印一个换行符,相当于System.out.print("\n");
System.out.print("\\7");
}
}
输出:
12
3"4 5'6
\7
由此我们还可以明显看到println自带换行;print不提供自动换行
2.1.2 关键字
标识符可以包含关键字
下图中:
goto 和 const是保留字,其他是关键字
2.1.3 数据类型
- 基础数据
基本数据类型(都是小写)- 整数类型(byte-8bits;short-16bits;int-32bits;long-64bits)
- 浮点类型(float-32bits;double-64bits)
- 字符类型(char-16bits):字符型数据必须用单引号括起来,字符串数据必须用双引号括起来
- 布尔类型(boolen-True/False):逻辑类型不能进行直接转换
基本数据类型的封装类型:是为了支持数据类型之间的转换(首字母大写)
-
Integer:是基本数据类型int的封装类
继承关系:java.lang.Object——>java.lang.Number——>java.lang.Integer -
Float:float的封装类
继承关系:java.lang.Object——>java.lang.Number——>java.lang.Float -
Chracter:char的封装类
继承关系:java.lang.Object——>java.lang.Character -
Boolean:boolean的封装类
继承关系:java.lang.Object——>java.lang.Boolean
- 其他引用数据类型
- 类
- 接口
- 数组类型
2.1.4 常量
引用类型数据是不可定义常量的
常量使用全大写字母命名方式
格式:
final 数据类型 符号常量=文字常量
2.1.5 变量的声明和初始化
Java语言的所有基本数据类型和引用数据类型都可以声明为相应的变量,需要注意的是:类的成员变量(成员方法体外声明的变量,在生成对象实例时,系统会自动赋初值);而在方法体内声明的变量,即局部变量,需要由语句显示地赋初值,否则会产生编译错误。
【例2.2 常量与变量初始化示例】
public class ConstantsAndInitialization {
static boolean outBoolean;
static char outChar;
static double outInt;
static double outDouble;
public static void main(String[] args) {
final double PI=3.1415;
boolean inBoolean;
char inChar;
int inInt;
double inDouble;
inBoolean=true;
inChar='a';
inInt=100;
inDouble=0.01;
System.out.println(PI);
System.out.println(outBoolean);
System.out.println(inBoolean);
System.out.println(outChar);
System.out.println(inChar);
System.out.println(outInt);
System.out.println(inInt);
System.out.println(outDouble);
System.out.println(inDouble);
}
}
程序2-5行是类成员变量声明,系统会进行默认初始化,7-11行是局部变量申明,12-15行进行赋值初始化。
输出:
3.1415
false
true
0.0
100
0.0
0.01
2.2 操作符
2.2.1 赋值操作符
基本类型赋值存放在栈中,引用类型的值放在堆中
class IntNumber{
int i;
}
public class Assignment {
public static void main(String[] args) {
IntNumber n1=new IntNumber();
IntNumber n2=new IntNumber();
int j=9;
int k=47;
n1.i=9;
n2.i=47;
System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i+",j:"+j+",k:"+k);
n1=n2;
j=k;
System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i+",j:"+j+",k:"+k);
n1.i=27;
j=27;
System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i+",j:"+j+",k:"+k);
}
}
1:n1.i:9,n2.i:47,j:9,k:47
1:n1.i:47,n2.i:47,j:47,k:47
1:n1.i:27,n2.i:27,j:27,k:47
2.2.2 数学操作符
重点掌握自加、自减
同时二元数学操作符具有左结合性
public class AutoInc {
public static void main(String[] args) {
int i=2;
System.out.println(i);
System.out.println(i++);
System.out.println(i);
int j=2;
System.out.println(j);
System.out.println(++j);
System.out.println(j);
}
}
2
2
3
2
3
3
2.2.3 关系操作符
值得注意的是:
“==”
一般比较两个基本类型的数据,当“==”
用于比较引用类型的数据时,比较的是引用类型的句柄(类似对象的一个唯一的身份id),而不是其所指的内容,所以对于两个引用类型的数据值是否相等,必须使用专用的方法equals()
。
- 基本类型使用“==”、“!=”来比较是否相等
- 引用类型使用equals()
public class Equivalence {
public static void main(String[] args) {
int i=1;
int j=1;
System.out.println("基本的数据i和j用==来比较是否相等的结果为:");
System.out.println(i==j);
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println("引用数据类型n1和n2用==来比较是否相等结果为:");
System.out.println(n1==n2);
System.out.println("引用数据类型n1和n2用equals()方法来比较是否相等的结果为:");
System.out.println(n1.equals(n2));
}
}
基本的数据i和j用==来比较是否相等的结果为:
true
引用数据类型n1和n2用==来比较是否相等结果为:
false
引用数据类型n1和n2用equals()方法来比较是否相等的结果为:
true
2.2.4 逻辑操作符
逻辑操作符涉及的“短路问题”:
public class ShortCircuit {
static boolean test1(int val) {
System.out.println("test1("+val+")");
System.out.println("result:"+(val<1));
return val<1;
}
static boolean test2(int val) {
System.out.println("test2("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
static boolean test3(int val) {
System.out.println("test3("+val+")");
System.out.println("result:"+(val<3));
return val<3;
}
public static void main(String[] args) {
if(test1(0)&&test2(2)&&test3(2))
System.out.println("expreesion is true");
else
System.out.println("expression is false");
}
}
输出
test1(0)
result:true
test2(2)
result:false
expression is false
我们可以看到,当某个决定整个表达式值得结果出现时,其后所有操作便不再进行,有效利用逻辑表达式可以提高代码潜在得性能。
2.2.5 位操作符和位移操作符
2.2.6 字符串操作符
操作符"+“可以实现两个或多个字符串得连接,也可实现字符串与其他类对象得连接,在连接时,其他类对象会被转换成字符串。
运算符”+="把两个字符串连接的结果放进第一个字符串中。
public class AddString {
public static void main(String[] args) {
int x=0,y=1,z=2;
String sString="x,y,z";
System.out.println(sString+x+y+z);
System.out.println(x+y+z+sString);
}
}
输出:
x,y,z012
3x,y,z
2.2.7 类型转换操作符
- 在一个表达式中允许有不同类型的数据进行混合运算。
- 低级数据类型可以直接自动转换为高级数据类型(short—>int)
- 高级数据类型转换为低级数据类型采用强制类型转换
(type)expression
public class TypeConversion{
public static void main(String[] args){
char a='A';
int i=100;
int sum=0;
sum=(int)a+i;
System.out.println(sum);}
}
输出:
165
2.2.8 三元条件操作符
- 布尔表达式?值1:值2
若布尔表达式的结果为true,就计算值1;若布尔表达式结果为false,就计算值2;并返回对应的值。
public class TernaryOperator {
public static void main(String[]
args){
char x='X';
int i=0;
System.out.println(true?x:0);
System.out.println(false?i:x);
}
}
输出:
X
88
值得注意的是第二次输出的时候输出X 的ascⅡ值,这是因为三元操作符会按照“?”后的数据的类型转换“:”后的数据的类型进行类型统一。
2.2.9 Java语言操作符的优先级与结合性
2.3 表达式与语句
2.3.1 表达式
表达式是运算符、常量和变量的遵循语法规则的组合。
2.3.2 语句与语句块
- Java语句包含基本语句和控制语句
- 基本语句完成类似于声明、赋值等操作
- 控制流语句控制程序流程
- Java中的每条语句均以分号(;)结束
2.4 控制流程
2.4.1 顺序结构
顺序结构就是程序从上到下一行一行地执行,中间没有任何跳转和判断。
2.4.2 选择结构
- if-else
- switch语句:
switch(表达式){
case value1:语句块1;break;
case value2:语句块2;break;
case value3:语句块3;break;
……
case value4:语句块n;break;
default:语句块n+1;
}
- 其中,表达式可以是byte、short、int、long、char或者枚举类型。
- 如果没有break语句,程序会默认执行下一个case语句(不管你下一个表达式符不符合),直到碰到break语句。
2.4.3 循环结构
- while循环
- do-while循环
do-while循环会首先执行循环体;然后计算循环条件表达式(意味着无论表达式结果如何,语句体都会执行一次)
2.4.4 break语句和continue语句
- break语句:终止循环
- continue:就强制结束本次循环,转而执行下一次循环
2.4.5 return语句
return是一种特殊的跳转语句,可以从方法中退出。