Java入门
基础语法
对象:对象是类的一个实例,有状态和行为。类:类是一个模板,它描述一类对象的行为和状态。方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作。实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
编写 Java 程序应注意以下几点:
大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
类名:对于所有的类来说,类名的首字母应该大写。例如 MyFirstJavaClass 。
方法名:所有的方法名都应该以小写字母开头。方法名含若干单词,则后面的每个单词首字母大写。源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java 标识符
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
标识符首字符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线_开始。
首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线_或数字的任何字符组合
关键字不能用作标识符
标识符是区分大小写的
示例合法标识符:age、$salary、_value、__1_value非法标识符:123abc、-salary
Java 修饰符
像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:访问修饰符和非访问修饰符:
访问控制修饰符使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限 : default, public , protected, private:
default :(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
修饰符当前类同包类子孙类(同包)子孙类(不同包)其他包
publicYYYYY
protectedYYYY/NN
defaultYYYNN
privateYNNNN
非访问控制修饰符 : static,final, abstract, synchronized:
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static :用来修饰类方法和类变量。
静态变量:static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
final :用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract :用来创建抽象类和抽象方法。
synchronized 和 volatile :主要用于线程的编程。
Java 关键字
下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。
Java 运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
算术运算符
用在数学表达式中,下表列出了所有的算术运算符:
增减运算符
自增(++)自减(- -)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
前缀自增自减法(++a,- -a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a- -): 先进行表达式运算,再进行自增或者自减运算
关系运算符
比较两个值的关系,得到结果为布尔型
赋值运算符
逻辑运算符
操作符描述例子(A真B假)
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
||称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
!称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。
三元运算符(?:)
三元运算符即条件运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
语法:variable x = (expression) ? value if true : value if false代码示例:
publicclassTest{
publicstaticvoidmain(String[]args){
inta,b;
a=10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b=(a==16)?20:30;
System.out.println("Value of b is : "+b);
// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
b=(a==10)?20:30;
System.out.println("Value of b is : "+b);
}
}
位运算符
应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。
其他运算符
Java 转义符
符号字符含义
\n换行 (0x0a)
\r回车 (0x0d)
\f换页符(0x0c)
\b退格 (0x08)
\0空字符 (0x0)
\s空格 (0x20)
\t制表符
"双引号
'单引号
\反斜杠
\ddd八进制字符 (ddd)
\uxxxx16进制Unicode字符 (xxxx)
数据类型
java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
有关数据类型的补充
数字类型
byte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 127(2^7-1);默认值是 0;byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;例子:byte a = 100,byte b = -50。
short 数据类型是 16 位、有符号的以二进制补码表示的整数最小值是 -32768(-2^15);最大值是 32767(2^15 - 1);Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是 0;例子:short s = 1000,short r = -20000。
int 数据类型是32位、有符号的以二进制补码表示的整数;最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);一般地整型变量默认为 int 类型;默认值是 0 ;例子:int a = 100000, int b = -200000。
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。"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;float 在储存大型浮点数组的时候可节省内存空间;默认值是 0.0f;浮点数不能用来表示精确的值,如货币;例子:float f1 = 234.5f。
double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;浮点数的默认类型为 double 类型;double类型同样不能表示精确的值,如货币;默认值是 0.0d;例子:double d1 = 7D ;double d2 = 7.; double d3 = 8.0; double d4 = 8.D; double d5 = 12.9867; 7 是一个 int 字面量,而 7D,7. 和 8.0 是 double 字面量。
字符类型
char类型是一个单一的 16 位 Unicode 字符;最小值是 \u0000(即为 0);最大值是 \uffff(即为 65535);char 数据类型可以储存任何字符;例子:char letter = 'A';。
布尔类型
boolean数据类型表示一位的信息;只有两个取值:true 和 false;这种类型只作为一种标志来记录 true/false 情况;默认值是 false;例子:boolean one = true。
变量类型
Java语言支持的变量类型有:类变量:独立于方法之外的变量,用 static 修饰。实例变量:独立于方法之外的变量,不过没有 static 修饰。局部变量:类的方法中的变量。
类变量(静态变量)
类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。静态变量在第一次被访问时创建,在程序结束时销毁。与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。静态变量可以通过:ClassName.VariableName的方式访问。类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
实例变量
实例变量声明在一个类中,但在方法、构造方法和语句块之外;当一个对象被实例化之后,每个实例变量的值就跟着确定;实例变量在对象创建的时候创建,在对象被销毁的时候销毁;实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;实例变量可以声明在使用前或者使用后;访问修饰符可以修饰实例变量;实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
局部变量
声明在方法、构造方法或者语句块中;在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;访问修饰符不能用于局部变量;只在声明它的方法、构造方法或者语句块中可见;是在栈上分配的。没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
循环结构
顺序结构的程序语句只能被执行一次。循环结构可以同样的操作执行多次。
while 循环while是最基本的循环,它的结构为:
while( 布尔表达式 ) { //循环内容}只要布尔表达式为 true,循环就会一直执行下去。
do…while 循环 while 语句不满足条件则不能进入循环,而do…while 循环至少会执行一次。
do { //代码语句}while(布尔表达式);ps:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
for 循环
for循环执行的次数是在执行前就确定的,使一些循环结构变得更加简单。
for(初始化; 布尔表达式; 更新) { //代码语句}
for 循环 plus
for(声明语句 : 表达式){ //代码句子}声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
break 关键字break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
continue 关键字continue 适用于任何循环控制结构中。作用是让程序跳过当前循环。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
条件语句
初级if(布尔表达式){ 布尔表达式为true将执行的语句}
中级if(布尔表达式){ //如果布尔表达式的值为true}else{ //如果布尔表达式的值为false}
高级if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码}else if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码}else if(布尔表达式 3){ //如果布尔表达式 3的值为true执行代码}else { //如果以上布尔表达式都不为true执行代码}
异常处理
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
异常捕获使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:
try{ // 程序代码}catch(ExceptionName e1){ //Catch 块}
多重捕获try{ // 程序代码}catch(异常类型1 异常的变量名1){ // 程序代码}catch(异常类型2 异常的变量名2){ // 程序代码}catch(异常类型3 异常的变量名3){ // 程序代码}
java内置异常类
非检查项异常检查项异常
正则表达式