知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

第二章 java语言基础1

发表时间:2022-03-25来源:网络

第二章 java语言基础1
1.程序基本结构
Java语言的源程序是一个或多个以.java为扩展名的文件
Java源程序中可包含三个基本部分:
一个包声明package语句(可选);类库
package database;
任意数量的引入import语句(可选);
include
import java.applet.Applet;
类和接口声明
class Hello{ … }
interface DataCollect{ …}
包声明:package语句
包是类和接口的集合,即为类库;
用类库管理类,方便对类和接口管理,减少类名、接口名之间的重名问题;
Java的类都包含在类库中,package语句为类、接口(或者说是字节码文件)来指定所属的类库(包)。
在一个源程序中,只能有一个包声明语句,且是程序的第一条语句。
引入语句:import语句
源程序中可以有任意条import引入语句;
当源程序在编译时,会将需要的在引入语句中的类引入到程序中。
import语句在包语句后,所有类或接口之前。
import语句有两种形式:1:import 包名.类名; 2:import 包名.*;
类和接口声明
类和接口是程序的基本组成单元;
类是由成员变量和成员方法等组成,表示了对象的基本属性和行为;
接口表现了对象所具有的行为规范。
源程序中至少有一个类或接口创建。

在一个源程序中,只能有一个包声明语句源程序中可以有任意个import引入语句。当源程序在编译时,对不需要引入的类不会引入类的体是由成员变量和成员方法等组成的在一个Java源程序中,只能有一个类可以被声明为public(公共)类。若某个类中有main()方法,则声明该类为public类。若想创建多个public类,应该为每一类单独地创建一个源程序。应该用public修饰的类,即公共类作为源程序的文件名,并需要注意的是文件名要和该类名的大小写保持一致在应用程序Application中,main()方法是一个特殊的方法,是Application程序运行的入口
public static void main(String args[])
2.Java字符集
2.1 字符集
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,不同的字符集所包含的字符个数也不同
常见字符集: ASCII字符集 GB2312字符集 Unicode字符集
ASCII码:上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
缺点:不能表示所有字符;相同的编码表示的字符不一样:比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג)
Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。
缺点:Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别 Unicode 和 ASCII:计算机无法区分三个字节表示一个符号还是分别表示三个符号。另外,我们知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。
UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则:对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行编码(等同于ASCII码);对于多字节的UTF-8编码,如果编码包含 n 个字节,那么第一个字节的前 n 位为1,第一个字节的第 n+1 位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码
• Java语言中基本所有输入元素都是采用ASCII,而标识符、字符、字符串和注解则采用Unicode。
2.2 分隔符
Java中使用多种字符作为分隔符,用于辅助程序编写、阅读和理解。这些分隔符可以分为两类:
空白符:没有确定意义,但帮助编译器正确理解源程序,包括空格、回车、换行和制表符(Tab);
普通分隔符:拥有确定含义,常用的普通分隔符如表所示。
任意两个相邻的标识符之间至少有一个分隔符,便于编译程序理解;空白符的数量多少没有区别,使用一个和多个空白符实现相同的分隔作用;分隔符不能相互替换,比如该用逗号的地方不能使用空白符。

2.3 标识符
在各种编程语言中,通常要为程序中处理的各种变量、常量、方法、对象和类等起个名字作为标记,以便通过名字进行访问,这些名字统称标识符。
Java中的标识符由字母、数字、下划线或美元符组成,且必须以字母、下划线(_)或美元符($)开头。
由26个英文字母大小写,0-9 ,_或 $ 组成 ;数字不可以开头;不可以使用关键字和保留字,但能包含关键字和保留字;Java中严格区分大小写,长度无限制;标识符不能包含空格。
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
2.4 关键字
关键字的定义和特点
定义:关键字又叫保留字,是编程语言中事先定义的、有特别意义的标识符;被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写

2.5 保留字
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
3.数据类型
Java的数据类型分为两大类:
基本类型是一个单纯的数据类型,表示一个具体的数字、字符或布尔值。
引用类型是一个复杂的数据结构,是指向存储在内存的“堆”中数据的指针或引用(地址)。
3.1 按数据类型
对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

3.2 基本类型
Java各种基本类型的大小和取值范围

整数类型:byte、short、int、long
Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
java程序中变量常声明为int型,除非不足以表示大数,才使用long
1MB=1024KB 1KB=1024B
bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。
补码的计算规则:1.正数的补码和原码完全相同2.负数的补码是其反码加1,反码是对原码按位取反,其中最高位符号位保持不变。

浮点类型:float、double
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体OS的影响。
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 512E2 100E-2
通常情况下,应该使用double型,因为它比float型更精确。
字符型:char
字符型Char是采用16位的Unicode字符集作为编码方式
Char c = ‘A’; //声明变量c为字符型,并赋初值为’A’
表示形式:通过单个字符来指定字符型值,例如:‘A’、‘8’、‘Z’等;
通过转义字符来表示特殊字符型值,例如:’\n’、’\t’等;
直接使用Unicode值来表示字符型值,格式是‘\uXXXX’
转义字符表
转义字符 说明 Unicode编码
\b 退格符 \u0008
\t 制表符 \u0009
\n 换行符 \u000a
回车符 \u000d
‘’ 双引号 \u0022
’ 单引号 \u0027
\ 反斜杠 \u005c
布尔类型:boolean
boolean 类型适于逻辑运算,一般用于程序流程控制:
if条件控制语句;while循环控制语句;do-while循环控制语句for循环控制语句;
boolean类型数据只允许取值true和false,无null。
不可以0或非 0 的整数替代false和true,这点和C语言不同;Java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示《java虚拟机规范 8版》
3.3 引用类型
引用类型变量中的值是指向内存“堆”中的指针,即该变量所表示的数据地址。引用类型与基本类型在内存中存储的区别:

常用引用类型:数组:具有相同数据类型的变量的集合;类(class):变量和方法的集合;接口(interface):一系列方法的声明,方法特征的集合;枚举(enum):一种独特的值类型,用于声明一组命名的常数。
3.4 类型转换
类型转换的方式:字动类型转换 强制类型转换
自动类型转换时将某种基本类型变量的值赋值给另一种基本类型变量

自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:

有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
当把任何基本类型的值和字符串(String)进行连接运算时(+),基本类型的值将自动转化为字符串类型。
强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
当把一个数值范围大的变量赋值给一个数值范围小的变量时,必须强制类型转换
语法: 数据类型 变量1=(数据类型)变量2;
示例: int a = 56;
char c = (char)a; //把整形变量a强制类型转换为字符型
4.常量变量
4.1 变量
变量的声明与赋值可以分开
int a; //声明变量
a=1; //给变量赋值
声明变量时,可以几个同一数据类型的变量同时声明
int I,j,k;
Java变量一定要初始化!
4.2 变量作用域
在变量的使用过程中会涉及到变量的作用域和初始化,根据作用域范围可以将变量分为两种:局部变量 成员变量
局部变量被定义在某个程序块内或方法体内,局部变量的作用范围有限,只在相应的程序块内或方法体内有效,超出程序块或方法体则这些变量将无效。
程序块就是使用“{”和“}”包含起来的代码块,它是一个单独的模块。
4.3 变量初始化
局部变量在使用之前必须进行初始化,即变量必须有值后才能被使用(先写后读)
变量的初始化有两种方式:在声明变量的同时赋值;先声明变量,在使用变量前再赋值。
4.4 常量
常量是指一旦赋值之后其指不能再改变得变量。在Java预言中,使用final关键字来定义常量,其语法格式如下:
final 数据类型 变量名 = 初始值;
在开发过程中常量名习惯采用全部大写字母,如果名称中含有多个单词,则单词之间以“_”分隔。此外常量在定义时,需要对常量进行初始化,初始化后,在应用程序中就无法再对该常量赋值。
常量只能有一次初始化!
5.运算符表达式

5.1 运算符
运算符按数目可分为:
单目(一元)运算符:有一个操作数;
i++
双目(二元)运算符:有两个操作数;
a + b
三目(三元)运算符:有三个操作数。
x > y ? a : b
5.2 表达式
表达式是变量、常量、运算符、方法等按照一定的运算规则组成的序列并返回一个值。
例:(x+12.3/y)>= 10
X=100+20
表达式是运算符运算的表述,它返回值不仅与表达式中的操作数有关,而且还是运算符操作顺序有关。
表达式有时也称为运算式。
5.3 算术运算符

如果/和%的两个操作数都是整数类型,则除数不能是0,否则引发除以0异常。但如果两个操作数有一个是浮点数,或者两个都是浮点数,此时允许除数是0或0.0,任何数除0得到的结果是正无穷大(Infinity)或负无穷大(-Infinity),任何数对0取余得到的结果是非数:NaN。
5.4 算术运算符(单目)
运算符 使用方式 说明
+ +opD 正号,对opD无影响
- -opD 负号,对opD取负值
++ ++opD opD++ opD增1
– --opD opD-- opD减1
~ ~opD 按位求补
5.5自增、自减
++是自增运算,将操作数在原来的基础上加1
1.自增运算只能操作单个数值型的变量(整型、浮点型都行),不能操作常量或表达式;
2.自增运算可以放在操作数的前面(前缀自增),也可以放在操作数后面(后缀自增)。
前缀自增的特点是先把操作数自增1再放入表达式中运算
int a = 5;
int b =++a + 8; //a先自增变为6,再与8相加,最后b的值为14
等价于
Int a = 5; a=a+1; int b=a+8;
后缀自增的特点是先使用原来的值,当表达式运算结束后再将操作数自增1
int a=5;
int b=a++ + 8; //先使用a原来的值进行计算,得出b的值为13,最后a再自增1变为6
等价于
int a=5;
int b=a+8;
a=a+1;
–是自减运算,用法与++基本相似,只是将操作数的值在原来基础上减1
5.6 关系运算
操作符 描述 示例

大于,左边操作数大于右边操作数,则返回true int a=5,b=3; System.out.println(a>b);//true

= 大于等于,左边操作数大于或等于右边操作数,则返回true int a=5,b=3;
System.out.println(a>=b);//true
< 小于,左边操作数小于右边操作数,则返回true int a=5,b=3;
System.out.println(a3 00000000000000000000000000100000
-256 11111111111111111111111100000000
-256>>3 11111111111111111111111111100000
-256>>>3 00011111111111111111111111100000
位逻辑运算符

5.9 赋值
赋值运算符“=”的作用是将数据写入到变量的贮存单元中。在“=”运算符的左边是变量,右边则是待写入的数据值。
赋值操作必须注意:必须是将右边的数值赋给左边的变量;
右边的数值类型要与左边的变量类型一致或相容;
当它们的类型相同时,才能将右边的数值写入变量的贮存单元。
可以直接将一个值赋给变量
将一个变量值或表达式的值赋给另一个
类赋值运算符:
混合赋值运算符 示例 等价于
+= a +=b a=a+b
-= a-=b a=a-b
= a=b a=a*b
/= a/=b a=a/b
%= a%=b a=a%b
&= a&=b a=a&b
|= a|=b a=a|b
^= a^=b a=a^b
>=b a=a>>>b
5.10 条件运算符
由?和:组成的三目运算符“?:”称为条件运算符。
例: ( a > b )? a : b
它的格式为:
expreBool?expression1:expression2
expreBool表达式是boolean类型。
expression1和expression2表达式是相同类型。
当expreBool为true时,取expression1的值;
当expreBool为false时,取expression2的值
5.11 运算符优先级
优先级(由高到低) 运算符
分割符 . [] () {} , ;
一元运算 ++ – ! ~
强制类型转换 (type)
乘、除、取余 * / %
加、减 + -
移位运算符 >> >>>
= >>=
不要把一个表达式写得太复杂,如果一个表达式过于复杂,则把它分成多步来完成;
不要过多依赖运算符的优先级来控制表达式的执行顺序,以免降低可读性,尽量使用()来控制表达式的执行顺序

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜