参考链接
Java基本语法
关键字&标识符
关键字和保留字
定义数据类型
class、interface、enum、byte、short、 int、 long、 float、 double、 char、 boolean、 void
定义流程控制
if、 else、 switch、 case、 default、 while、 do、 for、 break、 continue、 return
定义访问权限修饰符
private、 protected、 public
定义类、函数、变量修饰符
abstract、 final、 static、 synchronized
定义类与类之间关系
extends、 implements
定义建立实例及引用实例,判断实例
new、 this、 super、 instanceof
用于异常处理
try、 catch、 finally、 throw、 throws
用于包
package、 import
其他修饰符及保留字
native、 strictfp、 transient、 volatile、 assert
goto、 const
标识符规则
- 由26个英文字母大小写,0-9,_或$组成
- 数字不能开头
- 不可使用关键字和保留字,但能包含
- 严格区分大小写,长度无限制
- 不能含空格
命名规范
包名:所有字母小写
类名、接口名:多单词时,所有单词首字母大写
变量名、方法名:多单词时,第一个单词首字母小写,其余首字母大写
常量名:所有字母都大写。
变量
注意事项
每个变量先声明后使用
变量作用域:所定义的一对{}内
统一作用域不能定义重名变量
- 声明变量:int var;
- 赋值:var = 10;
- 声明&赋值:int var = 10;
基本数据类型
Java是强类型语言。
- 强类型:数据定义类明确的数据类型,在内存中分配了不同的内存空间。
整数类型
byte(-128127)、short(2字节,-2^152^15-1)、int(4字节)、long(8字节,整型常量默认int,long型要加’l’或’L’)
浮点类型
float(4字节)、double(8字节)
通常默认double型,声明float型要加’f’或’F’
字符类型
char(2字节)
Java中所有字符都使用Unicode编码。
布尔类型
boolean
- 只允许true和false,没有null
- 不能用0和非0来替代
其他
变量按声明的位置不同可分为:成员变量(属性)和局部变量。
基本数据类型转换
自动类型转换
容量小的类型自动转换为容量大的数据类型。
- byte、short、char不会相互转换
- boolean不能与其他类型运算
强制类型转换
自动类型转换的逆过程。需要加上强制符()。
数据类型与String转换
字符串类型
String属于引用数据类型。
基本数据类型与String类型转换
任何基本数据类型的值和String连接运算时,自动转化为String类型。
String不能直接转换成基本数据类型,可通过节本类型对应的包装类的方法实现。
lg:String a = “43”;int i = integer.parseInt(a);
运算符
- 算数运算符
+(正号、加、字符串连接)
-(负号、减)
* / % ++ – - 赋值运算符
=(支持连续赋值)
short i=2;
i += 2;//可以过
i = i + 2;//编译失败,i+2会变成2的int类型,所以需要强转。 - 比较运算符
== != < > <= >= instanceof - 逻辑运算符
& | !
&& || ^
&和&&,|和||区别是,&&、||短路判断。 - 位运算符
对整数的二进制进行运算
<< >> >>>(无符号右移) & | ^ ~ - 三元运算符
条件表达式?表达式1:表达式2;
流程控制
顺序结构
从上到下执行。
分支结构
if(条件表达式1){}
else if(条件表达式2){}
else{}
switch(表达式){
case 常量1:语句1;break;
…
default:语句;break;
}
- switch表达式中的值必须是:byte、short、char、int、enum、String
循环结构
for循环
while循环
do-while循环
break和continue在循环中的使用。return结束整个方法(包括方法内的循环)。
Java输入与输出
输出到控制台
System.out.println();//带换行输出
从键盘输入
1.导入java.util.Scanner包;
2.创建一个从键盘输入的Scanner对象:Scanner scan = new Scanner(System.in);;
3.调用新建对象的相关方法,来获取制定类型的变量:int num = scan.nextInt();。
数组
声明
int var[];
int[] var;
- 声明时,不可指定长度
初始化
- 动态初始化,分配空间与赋值分开(以int var[]为例的两种初始化)
int arr[] = new int[3];int[0]=…
int arr[]; arr = new int[3];int[0]=… - 二维数组动态初始化(以int arr[]; arr = new int[3];为例)
int arr[][];arr = new int[3][2];arr[0][0]=…
int arr[][];arr = new int[3][];arr[0]=new int[3];…arr[0][0]=… - 静态初始化,分配空间与赋值同时进行,不能显示写出大小(以int var[]为例的两种初始化)
int arr[] = new int[]{3,4,5};
int arr[] = {3,4,5}; - 二维数组静态初始化(以int arr[] = new int[]{3,4,5};为例)
int arr[][] = new int[][]{{1,2,3},{4,5},{6,7,8,9}} - 数组是引用类型,它的元素相当于类的成员变量,因此一经分配空间,会隐式初始化,数据类型不同,初始化值不同。???在main方法里,怎么就是成员变量了???
数组的[]些哪里都可以,几维就看数组名和前面类型名的[]一共有几个
数组元素的引用
- 名[下标]
- 名.length 得到数组元素个数
Arrays工具类
操作数组的工具类java.util.Arrays,包含各种方法
- boolean equals(int[] a,int[] b); //判断数组是否相等
- String toString(int[] a);//输出数组信息
- void fill(int[] a,int val);//将指定值填充到数组中
- void sort(int[] a);//对数组进行排序
- int binarySearch(int[] a,int key);//对排序后数组进行二分法检索指定值
lg:int nummbers[] = {3,1,2,4,5};Arrays.sort(numbers);//得到排序后的数组
面向对象
Java基本元素类和对象
- 类是对一类事物的描述,是抽象、概念上的定义
- 对象是实际存在的该类的每个个体,也称为实例
类的语法格式:
修饰符 class 类名【首字母大写】{
属性声明;
方法声明;
}
类的访问机制:
- 在一个类中的访问:类中的方法可以直接访问类中的成员变量(
static方法访问非static除外。
static方法访问static变量,
非static方法可以访问static和非static变量) - 在不同类中的访问:先创建要访问的类的对象,再用对象访问类中定义的成员。
- 访问方法:都要先创建对象,再访问。
- 每个文件只能有一个public类,其他类(private、缺省、protected)不限数量
类的成员一:属性
field=属性=成员变量
语法格式:修饰符 数据类型 属性名 = 初始化值;
nbsp;nbsp;修饰符常有:private、缺省、protected、public;
数据类型:任何基本数据类型或引用数据类型;
属性名:符合命名规范即可;
初始化值:可以不写,通常有默认初始化值。最好写上。
- 成员变量Vs局部变量:在类体内且方法体外声明的变量称为成员变量(属性);在方法体内声明的变量称局部变量。
- 局部变量除形参外,均需显示初始化。
- 形参指方法或构造器定义时()中的变量;方法局部变量指方法内部定义的变量
- age:int ,表示需要定义一个缺省的int类型的age变量
- -age:int 定义一个private的int类型age变量
类的成员二:方法
method=(成员)方法=函数
Java中方法不能独立存在,必须定义在类里。
声明格式:修饰符 返回值类型 方法名(形参类型 形参1,形参类型 形参2,。。。){…}
修饰符:public、缺省、private、protected
PS:方法被调用一次就会执行一次;方法中只能低哦啊用方法或属性,不能在方法中定义方法。
- +study():void 表示定义一个public的study方法,返回值void
- 方法的重载:同一个类中允许一个以上同名方法,要求参数列表有区别
- 可变个数形参(能接受0-N个变量):。。。(int a,String[] books)[JDK 5.0以前],。。。(int a, String…books);[JDK 5.0以后] 可变形参最多一个且需要放在形参声明最后
类的成员三:构造器
作用:创建对象;给对象进行初始化。
特征:与类同名,不声明返回值类型,不能被static、final、synchronized、abstract、native修饰,不能有return。
语法格式:修饰符 类名(参数列表){…}
- +Account(init_balance:double) 定义一个public构造器初始化balance
PS:每个类至少有一个构造器;默认构造器修饰符与所属类一致;一旦显示定义构造器,系统就不再提供默认构造器;父类构造器不可被子类继承。
对象的创建与使用
类的实例化,即创建类的对象。
创建对象语法: 类名 对象名 = new 类名();
对象的使用: 对象名.对象成员 可以访问对象成员(包括属性和方法)
匿名对象:没有变量名的对象,只用一次。例如:new Person().shout();
关键字:this package import super static final abstract interface
在方法或构造器中,【this.变量名或方法()】来调用当前类的成员变量或成员方法。如果本类中未找到,会从父类中查找。
在构造器中,【this()】用来调用本类的构造器。注:1.不能调用自身构造器。2.不能循环调用。3.一个构造器中,最多只能调用一个构造器。
package语句是Java源文件的第一条语句,指明文件中定义的类所在的包。
格式:package 顶层报名.子包名;
import引入指定包层次下所需要的类或全部类(.*)
格式:import 包名.类名
PS:1.如果使用不同包下的同名的类,需要使用全类名的方式指明调用的是哪个类。2.import static组合使用:调用指定类或接口下的静态属性或方法。
super来调用父类中的指定操作:访问父类属性;调用父类方法;在子类构造器中调用父类构造器。
PS:1.子父类出现同名成员时,用super表明调用父类成员;
2.super的追溯不仅限直接父类;
3.super和this用法相似;
4.子类所有构造器默认访问父类中空参构造器;
5.父类没有空参构造器时,子类构造器必须用this或super指定调用的构造器,且“二选一”放在构造器首行,否则编译报错。
static用来标明该数据在内存空间内只有一份,无论是否产生对象或产生多少对象。
static修饰的变量和方法,称为类变量(不因对象不同而不同)和类方法(不需创建对象就可以调用),随类的加载而加载。
- static可以修饰属性、方法、代码块、内部类
- 特点:1.随着类的加载而加载;2.优先于对象存在;3.修饰的成员被所有对象所共享;4.访问权限允许时,可不创建对象直接调用;5.static方法内部只能访问static修饰的属性或方法,不能访问非static的结构,如果要访问,需要new对象,通过对象调用访问;6.static方法内部不能有this或super,static方法不能背重写。
final用来修饰类、变量和方法。表示“最终的”。
- final标记的类不能被继承。String类、System类、StringBuffer类
- final标记的方法不能被重写
- final标记的变量称为常量。名称大写,只能被赋值一次。
//可以在构造器中final修饰的变量赋值
public final class Test(){
public static int totalNumber = 5;
public final int ID;
public Test(){
ID = ++totalNumber;
}
}
abstract用来修饰类和方法,表示抽象类、抽象方法。具体见“抽象类与抽象方法”
interface接口,详细见“接口(interface)”