概述
- JavaSE 回顾-基础语法
- 1. Java语言的特性
- 1.1 简单性
- 1.2 面向对象
- 1.3 分布式
- 1.4 健壮性
- 1.5 安全性
- 1.6 体系结构中立
- 1.7 可移植性
- 1.8 解释型
- 1.9 高性能
- 1.10 多线程
- 1.11 动态性
- 2. Java 基本语法注意点
- 2.1 类名
- 2.2 main方法
- 2.3 注释
- 2.4 数据类型
- 2.4.1 整型
- 2.4.2 浮点类型
- 2.4.3 char类型
- 2.4.4 boolean类型
- 2.5 变量
- 2.5.1 变量命名规定
- 2.5.2 变量初始化
- 2.6 常量
- 2.7 运算符
- 2.8 数值类型之间的转换
- 2.9 强制类型转换
- 2.10 空串与Null串
- 2.11 switch语句
- 2.12 大数值
- 2.12.1 BigDecimal
- 1. Java语言的特性
JavaSE 回顾-基础语法
1. Java语言的特性
1.1 简单性
- java剔除了C++中许多很少使用、难以理解、易混淆的特性。尽可能的简单化。
1.2 面向对象
- java是基于面向对象的程序设计技术设计的,将重点放在数据(即对象)和对象的接口上。
1.3 分布式
- java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。
- java 应用能通过URL打开和访问网络上的对象,其便捷程度就行访问本地文件一样。
1.4 健壮性
- java程序具有多方面的可靠性,Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。
1.5 安全性
- Java适用于网络/分布式环境,为了达到这个目标,安全方面投入很大。使用java可以构建防病毒、防篡改的系统。
- 不可信的代码在一个
沙箱环境
中执行,在这里不会影响主系统
。Java代码不论来自哪里,都不会脱离沙箱。
1.6 体系结构中立
编译器生成一个
体系结构中立
的目标文件
格式,这是一种编译过的代码
,只要Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java
编译器
通过生成与特定的计算机体系结构无关
的字节码指令
来实现这一特性。字节码文件
可以容易的在任何机器
上解释执行,而且还可以动态翻译成本地机器码
。Java虚拟机可以将执行最频繁的字节码序列翻译成机器吗,该过程为
即时编译
。Java
虚拟机可以检测指令序列
,增强其安全性。
1.7 可移植性
数据类型
规定具有固定的大小
。例如:Java中的int类型永远为32为的整数,不会随着操作系统或编译器不同而改变。二进制数据
以固定的格式
进行存储和传输
,消除了字节顺序
的困扰。字符串
是用标准的Unicode格式
存储的。- 作为
系统组成
部分的类库,定义了可移植的接口
。例如:有一个抽象的Window类,并给出了在UNIX、Windows和Macintosh环境下的不同实现。 - 除了用户界面有关的部分外,所有其他Java库都能很好的支持平台独立性,不用操心底层的操作系统。
- 不仅程序是可移植的,Java API 往往也比原生的API质量更高。
1.8 解释型
- Java解释器可以在
任何移植了解释器
的机器上执行Java字节码
。
1.9 高性能
字节码
可以在运行时动态翻译
成对应运行
这个应用的特定CPU
的机器码
。- 即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。
1.10 多线程
- Java支持
多线程和并发性
,可以带来更好的交互响应和实时行为。
1.11 动态性
- 适应不断发展的环境,在类库中可以
自由的添加新方法和实例变量
,而对客户端不产生任何影响
。
2. Java 基本语法注意点
2.1 类名
关键字
class
后面紧跟类名
。类名命名规则:
- 必须以
字母或下划线开头
,后面可以跟字母和数字的任意组合
。 - 注意:Java中的字母和数字的范围更大。字母包括
'A'~'Z'、'a'~'z'、'_'、'$'
或者在某种语言中表示字母的任何Unicode字符。 - 长度基本上没限制。
- 不能使用Java保留字作为类名。
public class $Test1 { //类名还可以是 _Test 以下划线开头 public static void main(String[] args) { int _a = 1; int $a = 1; System.err.println(_a); System.out.println($a); } }
- 必须以
源代码的文件名必须与公共类名相同,并用
.java
作为拓展名。类名命名规范:
- 类名以大写字母开头名词
- 骆驼命名法。
2.2 main方法
Java语言规范,main 方法 必须声明为
public
。Java SE 1.4及以后版本
强制
main 方法一定是
public修饰的。- main 方法 必须为
public static void main(String[] args)
,缺少public
、static
、以及String[] args
参数,都不能成为class 的入口,运行不了。
2.3 注释
Java一共3种注释方式:
// xxxxx
单行注释多行注释 ,形成一个注释块
/* xxxx xxx */
注意:
/* xxx*/
注释不能嵌套
使用。- 文档注释 可以用来自动地生成文档。
/** * @version * @author hxh */
2.4 数据类型
Java是强类型语言。每一个变量声明一种类型。一共有8种基本类型。
- 4种
整型
int
short
long
byte
- 2种
浮点类型
float
double
- 1种用于表示Unicode编码的
字符单元类型
char
- 1种用于
表示真值
类型boolean
注意: Java 有一个能够表示任意精度的算术包,通常被称为“大数值” (big number)。它只是一个Java对象,不是一个数据类型。
2.4.1 整型
整型用于表示没有小数部分的数值,它可以是负数据。
类型 | 字节数 |
---|---|
int | 4 |
short | 2 |
long | 8 |
byte | 1 |
- 整型的范围与运行Java代码的机器无关。
长整型
数值有一个后缀L或l
,如:1111L十六进制
数值有一个前缀0x或0X
,如 0xCAFE八进制
有一个前缀0
- Java7开始,加上
前缀0b或0B
就可以写二进制
数。如:0b1001就是9。 - Java7开始,还可以为数字字面量加下划线。如 1_000_00(0b1111_0100_0010_0100_0000)表示一百万。注意:这些下划线
只是为了让人易读
,Java编译器
会自动去除
这些下划线。
2.4.2 浮点类型
浮点类型用于表示有小数部分的数值。
类型 | 字节数 |
---|---|
float | 4 |
double | 8 |
double
类型数值精度是float类型的两倍
,称为双精度
数值。float类型数值有一个
后缀F或f
(3.14f),没有后缀F
的浮点数值(3.14)默认为double类型
。所有浮点数值计算都遵循IEEE 754规范。用于表示溢出或出错情况的三个特殊浮点数值:
- 正无穷大
- 负无穷大
- NaN(不是一个数字)
例如:
一个正整数除以0的结果为正无穷大。
计算0/0或者负数的平方根结果为NaN。
浮点数值
不适用
于无法接受舍入误差
的金融计算中。- 例如:
System.out.println(2.0-1.1);
结果为0.8999999999999999
而不是正确结果0.9
。 - 这种舍入误差原因是 浮点数值采用二进制系统表示,二进制系统中
无法精确地表示分数1/10
。就像十进制无法精确表示分数1/3一样。 - 如果数值计算中不允许出现这种舍入误差,就应该采用
BigDecimal
类。
- 例如:
2.4.3 char类型
char占2字节,16位。可在存放汉字,只能放单个字符。
char a='h'; //任意单个字符,加单引号。 char a='中'; //任意单个中文字 char a = 111; //整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
char 类型
原本
用于表示单个字符。但是现在有所改变,有些Unicode字符可以用一个char值描述,另一些Unicode字符则需要两个char值。char类型
字面量值
要用单引号
括起来。- 例如:’A’是编码值为65所对应的字符常量。它和 “A” 不同,”A” 是包含一个字符A的字符串。
对char类型字符运行时,直接当做ASCII表对应的整数来对待。
char m='a'; //a。 char m='a'+'b'; // Ã。 //char类型相加,提升为int类型,输出对应的字符。 int m='a'+'b'; //195没有超出int范围,直接输出195。 char m='a'+b; //报错。 因为b是一个赋值的变量。 char m=197; //输出字符编码表中对应的字符。 ——Ã。 char m='197; //因为有单引号,表示是字符,只允许放单个字符。 ——报错。 char m='a'+1; //提升为int,计算结果98对应的字符是b。——b。 char m='中'+'国'; // 42282。 char m='中'+'国'+'国'+'国'; // 报错。int转char有损失。因为结果已经超出char类型的范围。 int m='中'+'国'+'国'+'国'; //86820 char m='中'+1; //1是int,结果提升为int,输出对应的字符。 ——丮。 char m='中'+"国"; // 报错。String无法转换为char。 System.out.println('中'+"国"); //没有变量附值的过程。String与任何字符用“+”相连,转换为String。——中国。
char+char
,char+int
, 类型均提升为int
,赋值给char变量后,输出字符编码表中对应的字符
(char h = 97
a)。char类型的值可以表示为
十六进制值
,范围从u0000
到uffff
。除了转义序列
u
之外,还有其他用于表示特殊字符的转义序列。所有转义序列都
可以出现
在加引号的字符字面量或字符串中
。例如:'u2122'
"hellon"
转义序列
u
还可以出现在加引号的字符常量或者字符串之外
。其他
转义序列不可以
。Unicode转义序列会在
解析代码之前
得到处理。- 例如:
"u0022+u0022"
并不是一个由引号包围加号构成的字符串。实际上,u0022
会在解析之前转换为"
,这样就会得到""+""
,也就是一个空串
。
- 例如:
当心注释中的
u
。// Look inside C:users
会产生一个语法错误,因为u
后面并未跟着4个十六进制数。
public class Test1 { public static void main(String[] args) { System.err.println("1");// Look inside C:users } }
语法出错: 编译都通不过:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: Invalid unicode
在Java中,char类型描述了UTF-16编码中的一个代码单元。建议不要在程序中使用char类型,除非缺失需要处理UTF-16代码单元。最好将字符串作为抽象画数据类型处理。
2.4.4 boolean类型
- 只有两个值:
flase
和true
- 用来判断逻辑条件
整型值
和布尔值
之间无法相互转换
2.5 变量
2.5.1 变量命名规定
- 变量名必须是一个以
字母、下划线、$符号
开头并由字母或数字构成的序列。一般来说,在Java中,下划线和$均属于字母。π
、 其他国家的字母 也可以。 - 不能出现 其他符号 例如
+
、@
这样的符号 以及 空格 不能出现在变量名中。 - 大小写敏感
- 长度基本没有限制
- 尽管
$
是一个合法的Java字符,但是最好不要出现在自己的代码中使用这个字符。它只用在Java编译器或者其他工具生成的名字中。 - 不能使用Java保留字
int _a = 1;
int $a = 1;
System.err.println(_a);
System.out.println($a);
2.5.2 变量初始化
- 声明后的一个变量,
不能直接使用未初始化的变量
。必须
使用赋值语句对变量进行显式初始化
。
2.6 常量
- 利用关键字
final
指示常量。 - final修饰的变量只能被赋值一次,一旦赋值一次后,不能再更改。
- 习惯上常量名使用全大写
- 若某个常量经常
被一个类中的多个方法中使用
,通常称该常量为类常量
。可以使用static final
设置一个类常量。定义在main方法的外部。
2.7 运算符
- 当参与
/
运算的两个操作数都是整数
时,表示整数除法
;否则表示浮点除法
。
- 例如 :
15.0/2
等于7.5
而15/2
等于7
- 例如 :
整数被0除
将会产生一个异常
,而浮点数被0除
将会得到一个无穷大或NaN结果
。
2.8 数值类型之间的转换
小字节类型转换成大字节类型无信息丢失转换,相反,可能会有精度损失。
下图中,6个实心箭头表示无信息丢失的转化,3个虚线箭头表示可能有精度损失。
二元运算
时,注意:先将两个操作数转换为同一种类型,然后再进行计算。- 若 两个中有一个是double类型,另一个将会转换为double类型;
否则
,若 两个中有一个是float类型,另一个将会转换成float类型;否则
,若 两个中有一个是long类型,另一个将会转换成long类型;否则,两个都将会转换成int类型
。
2.9 强制类型转换
强制类型转换通过
截断小数部分
将浮点值转换成整型
。如果想对浮点数进行舍入运算,就需要用
Math.round()
方法,该方法返回值为long类型
,所以只有使用显式的强制转换
才能将long类型
转换成int类型
。double x = 9.999; System.err.println((int)x);//9 Long hh = Math.round(x); System.err.println(hh);//10 int h = (int) Math.round(x); System.err.println(h); //10
需要注意
目标类型的表示范围
:- 如果试图将一个数值从一种类型强制转换成为另一种类型,而又
超出了目标类型的表示范围
,结果就会截断成一个完全不同的值
。例如:(byte)300
实际值 却只为 44。
int a = 300; System.out.println((byte)a); //44
- 如果试图将一个数值从一种类型强制转换成为另一种类型,而又
2.10 空串与Null串
空串
是长度为0的字符串,是一个Java对象
,有自己的串长度(0)和内容 (空)
。String h = null;
表示一个Null串
,目前没有任何对象
与该变量关联,无引用
。检查一个字符串,要检查它既不是null也不为空串:
if(str != null && str.length() != 0)
2.11 switch
语句
switch
语句将会从与选项值相匹配的case标签
处开始执行直到遇到break
语句,或者执行到switch语句的结束处
为止。- 如果
没有匹配case分支
,而有default子句
,就执行default子句
。 - 很有可能触发多个分支:
- 如果在case分支语句的
末尾没有break
语句,那么就会接着执行
下一个case分支语句。
- 如果在case分支语句的
case标签
可以是:
- 类型为
char 、byte 、short 、 int 的常量表达式
枚举常量
- Java SE 7开始,
case标签
还可以是字符串字面量
。
- 类型为
2.12 大数值
如果
基本的整数和浮点值精度不够
,那么可以使用java.math
包中的两个类:BigInteger
和BigDecimal
。这两个类可以处理包含任意长度数字序列的数值
。
BigInteger
类实现了任意精度的整型运算
。BigDecimal
类实现了任意精度的浮点数运算
。- 使用静态的
valueOf()
方法可以将普通的数值转换成大数值。
2.12.1 BigDecimal
浮点数值
不适用
于无法接受舍入误差
的金融计算中。
例如:
System.out.println(2.0-1.1);
结果为0.8999999999999999
而不是正确结果0.9
。System.out.println(1.01 + 2.02);//3.0300000000000002 System.out.println(3.0 - 2.1);//0.8999999999999999
这种舍入误差原因是 浮点数值采用二进制系统表示,二进制系统中
无法精确地表示分数1/10
。就像十进制无法精确表示分数1/3一样。
如果数值计算中不允许出现这种舍入误差,就应该采用
BigDecimal
类。用来对超过16位有效位的数
进行精确的运算。双精度浮点型变量
double可以处理16位有效数
。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double
只能用来做科学计算或者是工程计算,在商业计算
中要用java.math.BigDecimal
。
创建BigDecimal对象
主要有两种:BigDecimal b1= new BigDecimal("3.0");//new BigDecimal(Double.toString(3.0)) BigDecimal b2 = BigDecimal.valueOf(2.1);
- b1也可以写成
new BigDecimal(Double.toString(3.0))
,直接new BigDecimal(3.0)
,会出现精度问题。
BigDecimal x1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625 BigDecimal x2 = new BigDecimal("1.34");//1.34
- 除了这两种外,特殊的像0、1、10可以这样写
BigDecimal zero = BigDecimal.ZERO; BigDecimal one = BigDecimal.ONE; BigDecimal ten = BigDecimal.TEN;
- b1也可以写成
BigDecimal所创建的是对象,
不能使用传统的+、-、*、/等算术运算符
直接对其对象进行数学运算,而必须调用其相对应的方法
。方法中的参数也必须是BigDecimal的对象
。public BigDecimal add(BigDecimal value);//加法 public BigDecimal subtract(BigDecimal value);//减法 public BigDecimal multiply(BigDecimal value);//乘法 public BigDecimal divide(BigDecimal value);//除法
BigDecimal的
运算不对原值进行操作
,而是返回一个新的BigDecimal对象
。BigDecimal的
比较
用的是BigDecimal的compareTo
方法,将此 BigDecimal 与指定的 BigDecimal 比较。- 注意:
值相等
但具有不同标度
的两个BigDecimal对象(如,2.0 和 2.00)被认为是相等
的。 - BigDecimal 在数字上
小于、等于或大于
比较对象时,返回-1、0 或 1
。
BigDecimal a = BigDecimal.valueOf(1); BigDecimal b = BigDecimal.valueOf(20); BigDecimal c = a.add(b); int i1 = a.compareTo(b);//-1 int i2 = b.compareTo(b);//0 int i3 = c.compareTo(b);//1
- 注意:
最后
以上就是美满洋葱为你收集整理的JavaSE回顾-基础语法JavaSE 回顾-基础语法的全部内容,希望文章能够帮你解决JavaSE回顾-基础语法JavaSE 回顾-基础语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复