Java基础语法

Download Report

Transcript Java基础语法

第1章回顾
1.下载、安装JDK
2.Java开发环境搭建
path、classpath
3.Java实现可移植性靠的是JVM。
4.Java程序的执行步骤。
javac HelloWorld.java
java HelloWorld
1
第2章 Java基础语法
标识符
关键字
常量和变量
运算符
表达式
分支结构
变量的作用域
循环结构
基本数据类型
2
1.标识符
• 概念:Java程序中需要处理的各种变量、常
量、方法、对象和类等起个名字作为标记,
以后可通过名字来访问或修改某些信息,这
些名字称为标识符。
• 理解:凡是自己可以起名字的地方都叫标识
符,都要遵守标识符的命名规则。
• 例:HelloWorld.java
类名、方法名、数组名、变量名
HelloWorld、args
3
命名规则
•
•
•
•
•
•
•
•
标识符由字母、数字、下划线或美元符组成。
标识符以字母、下划线或美元符开头。
标识符区分大小写,如”abc”和”Abc”是不同的。
标识符对于长度没限制。
不能使用Java中的关键字作为标识符。
判断: class a+b my ver 2me jy#
最简单的方法:使用英文字母或单词即可。
约定俗成:见名知意。例HelloWorld.java
4
2.关键字
abstract
assert
boolean
break
byte
case
catch
protected
class
continue
const
default do
double
synchronized
extends
enum
final
finally
float
for
implements
interface
goto
import
long
int
if
instanceof
native
new
package
private char
return
short
static
else
super
strictfp this
throw
throws
transient
try
void
volatile while
public
1.关键字是Java语言本身使用的字符串,有特殊
的语法含义,是保留给Java编译器识别用的。
2.在Java中goto和const没有任何意义。
3.所有Java关键字都是小写英文。
4.true,false,null不是关键字,但不能作为标识符用。
5
3. Java数据类型
数
据
类
型
基
本
数
据
类
型
引
用
数
据
类
型
数值型
整数类型(byte、short、int、long)
浮点类型(float、double)
字符型(char)
布尔型(boolean)
类(class)
接口(interface)
数组(array)
6
布尔类型
• 布尔类型适用于逻辑运算,一般用于程序流程
控制。
• 布尔类型的变量值只有true和false两种,不
可以用0或非0的整数代替。
boolean flag = true;
if (flag){
//do something
}
7
字符类型
• Java字符采用Unicode编码。
• 说明:ASCII码
Unicode编码(全球语言统一编码)
• 字符常量必须用单引号括起来。
• 例:char ch1 = ‘a’;
char ch2 = ‘中’;
• 给字符变量赋值使用字符和数值都行。
char ch3 = 97;
8
转义字符:Java使用一种特殊形式的字符常量值
来表示一些难以用一般字符表示的字符,它们以
一个“\”开头。
范例Demo04:
转义字符的应用
9
//转义字符的应用
public class Demo04 {
public static void main(String[] args) {
char ch1 = '\"';
char ch2 = '\\';
System.out.println("ch1:"+ch1);
System.out.println("ch2:"+ch2);
System.out.println("Hello world!");
System.out.println("\"Hello world!\"");
}
}
10
整数类型
• Java的4种整数类型有固定的表数范围和字段
长度,不受操作系统的影响,保证程序可移植
类型
byte
short
int
long
占用存储空间
1字节
2字节
4字节
8字节
表数范围(注意)
-128~127
-215~215-1
-231~231-1
-263~263-1
• Java语言整型常量默认为int型;声明long型
常量要在数据后加’l’和’L’。
int i = 100;
long g = 55555555L;
11
浮点类型
• Java浮点类型有固定的表数范围和字段长度
,不受操作系统的影响,保证程序可移植。
类型
占用存储空间 表数范围(注意)
float 4字节
-3.403E38~3.403E38
double 8字节
-1.798E308~1.798E308
• 浮点型数据是有误差的。 float(7位) double(15位)
• Java浮点型常量默认为double型;声明float
型常量要在数据后加’f’和’F’。
double b = 100.457;
float f = 55.555555F;
12
字符串类型
• String:用来声明字符串,是字符串数据
类型。它属于系统的类,可以像其它基本
数据类型一样,直接通过赋值的方式进行
声明。
• 字符串常量表示:用双引号括起来。
String str = "zhangsan";
System.out.println("Hello World!");
13
public class TestVar {
public static void main(String[] args) {
boolean b = true;
int x, y = 9;
double d = 3.1415;
char c1, c2 = 'c';
c1 = '\u534e';
x = 12;
System.out.println("b=" + b);
System.out.println("x=" + x + ",y=" + y);
System.out.println("d=" + d);
System.out.println("c1=" + c1);
System.out.println("c2=" + c2);
}
}
14
4.Java常量
1.在Java语言中,利用final关键字定义常
量。常量被设定后,不允许再进行更改。
2. 45
123.45
final int ABC = 100;
final double PI = 3.1415;
final boolean IS_MAN = true;
3.Java约定常量的标识符全部用大写字母
4.在定义常量时,需要对常量初始化赋值。
15
5.Java变量
1.变量是Java程序中的基本存储单元。它
的定义包括变量名、变量类型、作用域。
2.在Java中,每一个变量都属于特定的数
据类型,在使用前必须先声明,再使用。
3.举例: int max = 5;
double d1,d2,d3 = 123.4;
String str = “hello”;
4.可以同时声明几个同一数据类型的变量
5.本质:变量就是内存中的一小块区域。黑板
16
补充:程序执行过程
程序
*.class
硬盘
代码
内存
操作系统
代码
内存情况
heap(堆)
stack(栈)
new出来的东西
1.Load到内存中
2.找到main()方法开始执行 局部变量
静态变量
字符串常量
存放代码
data
segment
code
segment
17
Java程序的基本组成
Java源程序由5部分组成
1.package语句
2.import语句
3.类
4.方法
5.语句
18
package org.ly.demo06.b ;
// 放在不同的包中
import org.ly.demo06.a.* ;
// 导入不同包中的类
public class ImportDemo {
public static void main(String args[]){
int x = 123;
System.out.println(new Demo().getContent()) ;
}
public void info(){
// 得到信息
System.out.println( “ ----------”) ;
}
}
class A {
}
19
变量的分类、作用域、初始化
根据变量的作用范围分类
•局部变量:方法或语句块内部定义的变量。
•成员变量:方法外部、类的内部定义的变量
•静态变量:由static声明的变量。
变量作用域:从声明处开始,到“}”结束。
变量初始化:所有的局部变量在使用之前必须进行初
始化,即先有值再用。
int count = 1;
int num;
num = 5;
20
public class TestVer1 {
int x = 435;
//成员变量
static char = ‘s’;
//静态变量
public static void main(String[] args) {
int y = 123;
//局部变量
System.out.println(“y=”+y) ;
}
{
int z = 488;
//局部变量
}
}
class A {
System.out.println( “x=”+x) ;
}
21
6.基本数据类型转换
• Java变量的数据类型在定义时就已经确
定了,因此不能随意转换成其他的数据类
型,但允许用户有限度地做类型转换处理。
• 注意:必须慎用此功能,因为误用可能导
致数据精度降低或溢出。
• 方式:自动类型转换
强制类型转换
22
• boolean类型不可以转换为其他数据类型。
• 整型、字符型、浮点型的数据在混合运算中相
互转换,要遵循以下原则:
1.容量小的类型自动转换成容量大的类型
byte,short,charintlongfloatdouble
byte,short,char之间不会相互转换。三者在
计算时首先会转换为int类型,再计算。
2.容量大的类型转换成容量小的类型时,要加上
强制转换符。
3.实数常量默认为double型。
4.整数常量默认为int型。
23
int i1 = 123;
int i2 = 456;
double d1 = (i1+i2)*1.2;//自动转换
float f1 = (float)d1;
//强制转换
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2);
//系统将转换为int型运算,需要强制转换符
double d2 = 2e200;
float f2 = (float)d2; //会产生溢出
float f3 = 1.23F;
//必须加F
long l1 = 123;
long l2 = 30000000000L;
float f = l1+l2+f3;//系统将转换为float型计算
long l = (long)f; //强制转换会舍去小数部分
24
7.运算符
Java中运算符按照功能分:
•算术运算符: +,-,*,/,%,++,-•关系运算符:>,<,==,>=,<=,!=
•逻辑运算符:!,&,|,^,&&,||
•赋值运算符:=
•扩展赋值运算符:+=,-=,*=,/=,……
•字符串连接符:+
•位运算符:~,&,|,^,>>,>>>,<<
25
public class TestMath {
public static void main (String[ ] args) {
int i1 = 15;
注意
int i2 = 25;
int i = ( i2 ++ );
++,-System.out.print("i = "+i);
在前时先计算再取值
System.out.println("i2 = "+i2);
在后时先取值再计算
i = ( ++ i2 );
System.out.print("i = "+i);
System.out.println("i2 = "+i2);
i = ( - - i1 );
System.out.print("i = "+i);
System.out.println("i1 = "+i1);
i = ( i1 - - );
System.out.print("i = "+i);
System.out.println("i1 = "+i1);
}
}
26
逻辑运算符真值表
!
逻辑非
a
&
逻辑与
b
!a
|
^
&&
||
逻辑或 逻辑异或 短路与 短路或
a&b
a|b
a^b
a&&b
a||b
ture ture false ture ture false
ture
ture
ture false false false ture ture
false
ture
false ture ture false ture ture
false
ture
false false ture false false false false false
27
//测试短路与,短路或——提高运算效率
public class BooleanDemo2 {
public static void main(String[ ] args) {
int i = 3;
int j = 5;
boolean b1 = (i > 5) && ((i + j) >7); //第2个操作数不计算
System.out.println("(i > 5) && ((i + j) >7) = "+b1);
boolean b2 = (i < 5) || ((i + j) < 6); //第2个操作数不计算
System.out.println("(i < 5) || ((i + j) < 6) = "+b2);
}
}
28
赋值运算符
• “=”两侧的数据类型不一致,采用数据类型转
换原则处理(自动、强制)。
• 可以将整型常量直接赋值给byte、short、
char类型的变量,只要不超出其表数范围。
• byte
b1 = 25;
运算符
+=
-=
^=
用法举例
a += b
a -= b
a ^= b
byte
b2 = 256;
等效的表达式
a = a+b
a = a-b
a = a^b
29
字符串连接符
• “+”除用于加法运算外,还用于对字符串进行
连接操作。String str = “Hello ” + “ World”;
• “+”两侧的操作数中只要有一个是字符串类型
,系统会自动将另一个操作数转换为字符串,
然后再进行连接。
int a = 4578;
System.out.println(“a = ” + a);
“4578”
• 补充:当进行打印时,无论任何类型,都自动
转为字符串进行打印。
System.out.println(a);
30
位运算符
• 位运算操作的对象是整数类型,是进行二进
制位的运算。
• 包括byte,short,int,long,char
运算符
~
&
|
^
>>
>>>
<<
含义
按位非(取反)
按位与
按位或
按位异或
右移
无符号右移
左移
例
~ a
a & b
a | b
a ^ b
a >> b
a >>> b
a << b
31
数据在内存中的表示
• 整型数据(采用补码)
最高位
符号位
• 浮点数据(采用指数和尾数)
指数
符号位
指数
绝对值
数据
符号位
尾数
纯小数
32
三目条件运算符
• 语法格式
x ? Y : z
• 解释:x是逻辑表达式。
计算x值,x值为ture,表达式的值是y
x值为false,表达式的值是z。
33
//三目条件运算符应用
public class MaxDemo {
public static void main(String args[ ]) {
int x = 3;
int y = 8;
int max = x > y ? x : y ;
System.out.println("最大值:"+max);
String str = ( x % 2 == 0)?"偶数":"奇数";
System.out.println(x+"是"+str);
}
}
34
运算符的优先级
35
8.表达式
• 表达式是由运算符与操作数组成。操作数可以
是常量、变量、表达式,而运算符就是数学中
的运算符号。
-45
5 + sum
a + b – c / ( d * 3 + 6 )
• 表达式的值和类型
值:表达式运算所得的结果。
类型:表达式值的数据类型。
36
9.流程控制语句
• 条件语句——根据不同条件,执行不同语句





if
if … else …
if … else if …
if … else if … else if … else …
switch
TestIf.java
• 循环语句——重复执行某些动作
 for
 while
 do … while
37
//测试 if 语句
public class TestIf {
public static void main(String[ ] args) {
int i = 20;
if (i < 20) {
System.out.println("<20");
}
}
}
注意:
•if后面的语句块必须用大括号括起来,无论是
一条语句,还是多条语句。
•条件表达式后没有任何符号,直接接大括号
38
public class TestIf {
public static void main(String[ ] args) {
int i = 20;
if (i < 20) {
System.out.println("<20");
} else if (i < 40) {
System.out.println("<40");
} else if (i < 60) {
System.out.println("<60");
} else {
System.out.println(">=60");
}
System.out.println(">=60");
}
}
39
for语句
for (表达式1;表达式2;表达式3) {语句体}
表达式1
表达式2
false
true
语句体
表达式3
结束for语句
40
//求5!
public class TestFor {
public static void main(String[ ] args) {
int count = 1;
for (int i = 1;i <= 5;i ++){
count *= i;
}
System.out.println("用for循环完成5!="+count);
}
}
问题:i 的作用域?
课堂练习:编写程序,求1+3+5+……+99 =?并
输出结果(使用for语句)。
41
while语句和do…while语句
while (逻辑表达式) {语句体}
do {语句体} while(逻辑表达式) ;
TestWhile.java
表达式
true
语句体
false
语句体
true
表达式
false
while语句
do…while语句
42
转移语句
• Java的转移语句用在选择结构和循环结构中,
便于程序员控制程序执行的方向。
• break语句:①终止语句块的执行,强迫循环
中断。②如果break语句出现在内层循环,则
break语句只会跳出当前层的循环。TestBreak.java
• continue语句:满足条件时,跳过本次循环剩
余的语句,开始下一次循环。
43
44
public class TestContinue {
public static void main(String[] args){
for(int i=0;i<10;i++){
if(i==3){
continue;
}
System.out.println(" i= "+i);
}
}
}
流程控制语句举例
46
使用for语句嵌套,外层循环控制行,内层循环控制列。
//打印九九乘法表
public class NineTable{
public static void main(String[ ] args) {
for(int i = 1; i <= 9; i ++){
for(int j = 1; j <= i; j ++){
System.out.print (j+"*"+i+"="+(i*j)+" " );
}
System.out.println(" ");
}
}
}
47
课堂练习:打印三角形
48
//打印三角形图形
public class ForDemo{
public static void main(String[] args){
for(int i=1;i<=5;i++){
for(int j=1;j<=i*2-1;j++){
System.out.print(" * ");
}
System.out.println(" ");
}
}
}
49
输出1~50内前7个可以被3整除的数。
public class BreakDemo {
public static void main(String[] args){
int num = 0;
for(int i=1; i<50; i++){
if(i % 3 == 0){
System.out.println(i);
num ++;
}
if(num == 7){
break;
}
}
}
}
50
switch语句
switch(表达式){
case 选择值1:
case 选择值2:
┅┅
case 选择值n:
default:
}
语句体1;
语句体2;
break;
break;
语句体n;
语句体;
break;
• 条件表达式结果的类型必须是与整型数兼容,可以
是int、byte、short及char类型。
• break语句用于跳出switch结构,避免穿透。
• default语句是可选的。推荐不省略。
51
//switch语句应用,输出星期.
public class TestSwitch01 {
public static void main(String[ ] args){
int weekDay = 2;
switch (weekDay) {
case 0:System.out.println("周日");
case 1:System.out.println("周一");
case 2:System.out.println("周二");
case 3:System.out.println("周三");
case 4:System.out.println("周四");
case 5:System.out.println("周五");
case 6:System.out.println("周六");
default:System.out.println("出错了");
}
}
}
读程序写结果
52
//switch语句应用
public class TestSwitch02 {
public static void main(String[ ] args){
int i = 8;
switch ( i ) {
case 8:
case 4:
case 6:
case 13:System.out.println("AA");break;
case 5:System.out.println("BB");break;
default:System.out.println("出错了");
}
}
}
读程序写结果
53