您的位置:首页 > 编程语言 > Java开发

第二章 Java基础程序设计

2016-07-22 00:00 501 查看
摘要:  Java中的注释、标示符、关键字
 在Java中定义变量或声明常量
 Java中的数据类型、数据类型的转换
 运算符、表达式与语句

2.1 一个简单的Java范例

上节中我们在Java程序中输出了Hello World,现在我们重新来分析一下其代码结构:

public class Hello{
public static void main(String args[]){
System.out.println("Hello World!");
}
}
1) public class:这俩个都是java中的关键字,表示的是定义一个类,在Java中所有的操作都是由类组成的。在Java中声明一个类有两种方式,一种是“public class 类名称”,一种是“class 类名称”。使用“public class 类名称”时,类名与文件名必须一致,使用“class 类名称”声明一个类时,类名称与文件名可以不一致,但是在执行时一定要执行生成后的*.class。在一个Java文件中,可以有多个“class 类名称”的定义,但是“public class 类名称”只能有一个,我们称“public class 类名称”为主类;

2) Hello:类名称,在定义类名时,首字母必须大写。

3) public static void main(String args[]):程序的主方法,所有的程序都会以此方法作为起点执行。

4) System.out.println():输出语句,System.out指标准输出,System.out.println()在输出后会自动换行,System.out.print()不会自动换行。

5) {}:代码块,Java中所有的程序都是由一个个代码块组成的。

2.2 注释

任何编程语言在编写的时候都会有注释,注释的作用是方便用户阅读程序,提高程序的可读性,还可以跳过执行被注释的语句,方便调试代码。在Java中有三种注释:

1. 单行注释:直接在要被注释的内容前加//即可;

2. 多行注释:在要被注释的内容开头处加/*,结尾处加*/。

3. 文档注释:这种注释会被解释成程序的正式文档,并能包含在javadoc工具生成的文档中,可以用来说明程序的结构及方法。以/**开头,以*/结尾。

2.3 标识符

Java中的包、类、方法、参数、变量的名字都可以有任意顺序的大小写字母、数字、下划线、美元符号组成,但不能以数字开头,也不能是Java中的关键字。建议标识符最好以字母开头,尽量不要包含其他符号。

2.4关键字

像其他编程语言一样,Java中也有许多关键字,如下表:

abstract
assert
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
enum
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
strictfp
short
static
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Java中的关键字不需要去可以的强记,在练习中反复记忆即可。

2.5变量与常量

变量时利用声明的方式将内存中的某个内存块保留下来供程序使用,可以用来存放数据,使用变量之前必须声明数据类型。

常量是个固定的数值,是不可改变的。

2.6数据类型

在Java中数据类型可以分为基本数据类型和引用数据类型,Java中规定了8中基本数据类型来存储整数、浮点数、字符和布尔值。如图所示:



2.7基本数据类型

Java提供了8种基本数据类型。6种数字类型(4个整数型,2个浮点型),1种字符类型,还有1种布尔型,如下表:

数据类型
大小/位
范围
默认值
byte(字节)
8
-128 - 127
0
shot(短整型)
16
-32768 - 32768
0
int(整型)
32
-2147483648-2147483648
0
long(长整型)
64
-9233372036854477808-9233372036854477808
0
float(浮点型)
32
-3.40292347E+38-3.40292347E+38
0.0f
double(双精度)
64
-1.79769313486231570E+308-1.79769313486231570E+308
0.0d
char(字符型)
16
‘ \u0000 - u\ffff ’
‘\u0000 ’
boolean(布尔型)
1
true/false
false

2.7.1整数类型

在Java中整数数据类型分为long、int、short、byte四种。在程序中声明一个整型变量

short sum;
声明之后,Java会在可使用的内存空间中寻找一个占有两个字节的块供sum变量使用。

在Java中对于一个整型常量,其默认的就是int型。下面详解4中整型:

Ø long:

long数据类型是64位、有符号的以二进制补码表示的整数;

最小值是-9,223,372,036,854,775,808(-2^63);

最大值是9,223,372,036,854,775,807(2^63 -1);

这种类型主要使用在需要比较大整数的系统上;

默认值是0L;

例子:

long a = 100000L;
long b = -200000L;
Ø int:

int数据类型是32位、有符号的以二进制补码表示的整数;

最小值是-2,147,483,648(-2^31);

最大值是2,147,483,647(2^31 - 1);

一般地整型变量默认为int类型;

默认值是0;

例子:

int a = 100000;
int b = -200000;
Ø short:

short数据类型是16位、有符号的以二进制补码表示的整数

最小值是-32768(-2^15);

最大值是32767(2^15 - 1);

Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;

默认值是0;

例子:

short s = 1000;
short r = -20000;
Ø byte:

byte数据类型是8位、有符号的,以二进制补码表示的整数;

最小值是-128(-2^7);

最大值是127(2^7-1);

默认值是0;

byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;

例子:

byte a = 100;
byte b = -50;
Demo1:

public class Demo1{
public static void main (String ars[]){
//byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();

// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();

// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();

// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();

}
}
运行结果:



注意:

当整数的数据大小超出了可以表出的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值就达不到预期的效果了。

2.7.2浮点数类型与双精度浮点数类型

在程序设计中经常会使用到小数类型的数值,在Java中,这种数据类型称为浮点类型(float),当浮点数的表示范围不够大时,还有双精度(double)浮点数。

Ø float:

float数据类型是单精度、32位、符合IEEE 754标准的浮点数;

float在储存大型浮点数组的时候可节省内存空间;

默认值是0.0f;

浮点数不能用来表示精确的值,如货币;

例子:

float f1 = 234.5f;
Ø double:

double数据类型是双精度、64位、符合IEEE 754标准的浮点数;

浮点数的默认类型为double类型;

double类型同样不能表示精确的值,如货币;

默认值是0.0d;

例子:

double d1 = 123.4;
Demo2:

public class Demo2{
public static void main (String ars[]){
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();

// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();

}
}
运行结果:



2.7.3字符类型

字符类型在内存中占有两个字符,可以用来保存英文字符。计算机在处理字符类型时,是把这些字符当成不同的整数来看待。

Ø char:

char类型是一个单一的16位Unicode字符;

最小值是’\u0000’(即为0);

最大值是’\uffff’(即为65,535);

char数据类型可以储存任何字符;

例子:

char letter = ‘A’;
Demo3:

public class Demo3{
public static void main (String ars[]){
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);

}
}
运行结果:



给变量赋值的时候可以使用数字和字符,他们都可以是程序正确的运行,要注意的是要用一对单引号(‘’)括起;

public class Demo4{
public static void main (String ars[]){
char ch1 = 'a';
char ch2 = 97;
System.out.println("ch1 ="+ch1);
System.out.println("ch2 ="+ch2);
}
}
运行结果:



但是现在想输出一个包括双引号的字符串时,可以把字符变量赋值为转义字符,再将它输出。Java语言支持一些特殊的转义字符序列:

符号
字符含义
\n
换行 (0x0a)
\r
回车 (0x0d)
\f
换页符(0x0c)
\b
退格 (0x08)
\s
空格 (0x20)
\t
制表符
\"
双引号
\'
单引号
\\
反斜杠
\ddd
八进制字符 (ddd)
\uxxxx
16进制Unicode字符 (xxxx)
Demo5:

public class Demo5{
public static void main (String ars[]){
char ch1 = '\"';
char ch2 = '\\';
System.out.println("ch1 ="+ch1);
System.out.println("ch2 ="+ch2);
System.out.println("\"Hello,Hunk!\"");
}
}
运行结果:



2.7.4布尔类型

布尔类型的变量只有true和false两种;

Ø boolean:

boolean数据类型表示一位的信息;

只有两个取值:true和false;

这种类型只作为一种标志来记录true/false情况;

默认值是false;

例子:

boolean flag = true;
布尔值通常用来控制程序的流程。

2.8数据类型的转换

Java的数据类型在定义的时候就已经确定了,因此不能随意的转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型转换非为”自动类型转换“及”强制类型转换“两种。

2.8.1自动类型转换

自动类型转换的前提:

1. 转换前的数据类型与转换后的数据类型兼容

2. 转换后的数据类型的表示范围比转换前的类型大

Demo6:

public class Demo6{
public static void main (String ars[]){
int x = 30;
float y = 22.78f;
System.out.println("x/y = " + (x/y));
System.out.println("10/3.5 = " + (10/3.5));
System.out.println("10/3 = " + (10/3));
}
}
运行结果:



注意:任何类型的数据都向String转型。

String是一个类,属于引用数据类型:

String可以像普通变量那样直接用来赋值的方式进行生命,字符串用””“(双引号)括起来。两个字符串之间用”+“连接。

任何数据类型碰到String类型的变量或常量之后都会向String类型转换。

2.8.2强制类型转换

上面的Demo6可以看到当两个整数做除法运算时,结果还是整数,因此若想得到的结果是浮点类型,就必须做强制转换。

Demo7:

public class Demo7{
public static void main (String ars[]){
System.out.println("10/3 = " + ((float)10/3));
}
}
运行结果:



只要在变量前面加上要转换的数据类型,运行时就会自动转换,但不影响原来定义的数据类型。

若将一个超出变量范围的值赋给这个变量时,这种转换成为缩小转换,由于在转换过程中可能会丢失数据的精度,Java不会自动做这些数据类型转换,此时就必须要做强制类型转换。

2.9运算符与表达式

Java中的语句有多种形式,表达式就是其中一种。表达式是由操作数和运算符所组成的,操作数可以是常量、变量,也可以是方法,而运算符就是数学中的运算符号。Java提供了许多的运算符,这些运算符除了可以处理一般的数学运算外,还可以做逻辑运算、位运算等。运算符可以分为:

Ø 算术运算符

Ø 关系运算符

Ø 位运算符

Ø 逻辑运算符

Ø 赋值运算符

Ø 其他运算符

2.9.1算术运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。

表格中的实例假设整数变量A的值为10,变量B的值为20:

操作符
描述
例子
+
加法 - 相加运算符两侧的值
A + B等于30
-
减法 - 左操作数减去右操作数
A – B等于-10
*
乘法 - 相乘操作符两侧的值
A * B等于200
/
除法 - 左操作数除以右操作数
B / A等于2

取模 - 左操作数除右操作数的余数
B%A等于0
+ +
自增 - 操作数的值增加1
B + +等于21
--
自减 -- 操作数的值减少1
B - -等于19
Demo8:

public class Demo8{
public static void main (String ars[]){
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % a = " + (c % a) );
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
// 查看 d++ 与 ++d 的不同
System.out.println("d++ = " + (d++) );
System.out.println("++d = " + (++d) );
}
}
运行结果:



2.9.2关系运算符

下表为Java支持的关系运算符

表格中的实例整数变量A的值为10,变量B的值为20:

运算符
描述
例子
==
检查如果两个操作数的值是否相等,如果相等则条件为真。
(A == B)为假(非真)。
!=
检查如果两个操作数的值是否相等,如果值不相等则条件为真。
(A != B) 为真。
>
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
(A> B)非真。
<
检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
(A <B)为真。
> =
检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
(A> = B)为假。
<=
检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。
(A <= B)为真。
Demo9:

public class Demo9{
public static void main (String ars[]){
int a = 10;
int b = 20;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
}
运行结果:



2.9.3逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假

操作符
描述
例子
&&
称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
(A && B)为假。
| |
称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
(A | | B)为真。

称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
!(A && B)为真。
Demo10:

public class Demo10{
public static void main (String ars[]){
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));
System.out.println("a || b = " + (a||b) );
System.out.println("!(a && b) = " + !(a && b));
}
}
运行结果:



2.9.4赋值运算符

下面是Java语言支持的赋值运算符:

操作符
描述
例子
=
简单的赋值运算符,将右操作数的值赋给左侧操作数
C = A + B将把A + B得到的值赋给C
+ =
加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数
C + = A等价于C = C + A
- =
减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
C - = A等价于C = C -
A
* =
乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
C * = A等价于C = C * A
/ =
除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
C / = A等价于C = C / A
(%)=
取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数
C%= A等价于C = C%A
Demo11:

public class Demo11{
public static void main (String ars[]){
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println("c = a + b = " + c );
c += a ;
System.out.println("c += a = " + c );
c -= a ;
System.out.println("c -= a = " + c );
c *= a ;
System.out.println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
System.out.println("c /= a = " + c );
}
}
运行结果:



2.9.5条件运算符(?:)

语法结构:

variable x = (expression) ? value if true : value if false
Demo12:

public class Demo12{
public static void main (String ars[]){
int a , b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
运行结果:



2.9.6运算符的优先级

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别
操作符
关联性
后缀
() [] . (点操作符)
左到右
一元
+ + - !〜
从右到左
乘性
* /%
左到右
加性
+ -
左到右
关系
>> = << =
左到右
相等
== !=
左到右
逻辑与
&&
左到右
逻辑或
| |
左到右
条件
?:
从右到左
赋值
= + = - = * = / =%= >> = << =&= ^ = | =
从右到左
逗号

左到右
逻辑与
&&
左到右
逻辑或
| |
左到右
条件
?:
从右到左
赋值
= + = - = * = / =%= >> = << =&= ^ = | =
从右到左
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息