Java基础语法
-
标识符:程序之中用来定义名称的都叫标识符,类名,变量名,方法名都被称为标识符
- 所有的标识符都应该以字母(A-Z/a-z),美元符($)或者下划线(_)开始
- 首字符之后可以是字母(A-Z/a-z),美元符($),下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
-
关键字
Java关键字 -
变量
- 局部变量:没有特殊的关键字将变量标记为局部变量,这完全取决于声明变量的位置——它位于方法的两个大括号之间。因此,局部变量只对声明它们的方法可见,对于类的其他部分来说它们是不可见的。
- 类变量(静态域): 类变量是使用static关键字修饰的域。这告诉编译器无论这个类有多少个实例,这个变量只有一个副本。
- 成员变量(非静态域):从技术层面来说,对象将它们各自的状态存在“非静态域”中,也就是没有使用static关键字修饰的域。非静态域也被称为实例变量,因为对于类的每个实例(换句话说,就是每个对象)来说,它们的值都是独立的。
- 命名:小驼峰法
- 必须声明后才可以使用,可以先声明后初始化也可以声明的同时初始化
- main方法中定义的变量必须先初始化,然后才能输出
-
常量
常量,通常用来表示系统中不可变的量比如圆周率等,这种情况就可以用常量来定义,通常用final关键字来声明。- 常量在定义的时候,就需要对常量进行初始化。
- 常量一旦初始化之后,就不能再次对其赋值。
- final关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。
- final关键字与static关键字同时使用。
- 命名:全部大写, 相邻单词之间用下划线(_)隔开
-
方法
方法,就是具有独立业务逻辑的代码集合,通常是解决一类问题的步骤的有序组合,包含在类和对象中,在程序中创建,在其他地方调用。- 定义
修饰符 返回值类型 方法名(参数类型 参数名) { 方法体 return 返回值; }
- 调用
public class HelloWorld {
public static void main(String[] args) {
//创建对象hello
HelloWorld hello = new HelloWorld();
//调用方法
hello.showMyLove();
}
//定义方法
public void showMyLove() {
System.out.println("I love basketball");
}
}
- 修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型: 就是return之后的返回值的类型,有些方法可能没有返回值,用关键字void来表示。
- 参数:由参数类型和参数名称组成。参数名是一个变量,用于接收调用方法时传入的数据。调用方法时,实参不需要指定数据类型;多个参数以逗号分隔。
- 方法体:被封装的独立代码块,是方法的核心部分,处理重要的业务逻辑。
- 返回值:返回值的类型必须兼容且只能有一个
- 命名:小驼峰法
- 方法体遵循单一职责原则,即每个方法就仅仅做一件事情,这样可以增加可读性和可维护性。
- 方法的重载:同一个类中包含了两个或两个以上方法名相同,方法参数的个数、顺序或类型不同的方法,则称为方法的重载
-
数据类型
- Java数据类型可分为内置数据类型和引用数据类型
内置数据类型存储数据本身,包括八种基本类型,其中六种数字类型(四种整数型,两种浮点型),一个字符类型,一个布尔型。
引用数据类型存储数据的空间地址,包括类(class)、接口(interface)和数组 - 数据的自动类型转换的条件:1、目标类型与源类型兼容;2、目标类型大于源类型(比如int转double)
- 强制类型转换:有可能造成数据的丢失
- Java数据类型可分为内置数据类型和引用数据类型
double height=168.5;
int height2=(int)height; //height2=168
Java内置数据类型
- 变量的初始化
String name="小明";
char sex='男'; //char型变量要用单引号括起来
int age=22;
double weight=66.5;
float height=178.5f;
boolean isStudent=true;
- 可以用内置数据类型自带属性获得该类型的值的范围等
System.out.println("byte的大小:"+Byte.SIZE+" byte的默认值:"+a+
" byte的数据范围:"+Byte.MIN_VALUE+"~"+Byte.MAX_VALUE);
- Java运算符
算术、赋值、比较、逻辑、条件运算符。- 条件运算符(三元运算符):布尔表达式?表达式1:表达式2;如果布尔表达式为真,则返回表达式1的值,否则返回表达式2的值
-
运算符优先级
运算符优先级
注意:
1、>、<、>=、<=只支持对数值类型进行比较
2、==、!=两边的数据可以使数据类型、也可以是引用类型
3、逻辑运算符有短路原则
-
条件语句:
注意:
1、if语句括号中的表达式的值必须为布尔类型
2、switch语句中的变量类型可以是:byte、short、int、char以及枚举。从Java SE 7开 始,switch支持字符串String类型了,同时case标签必须为字符串常量或字面量。
3、case后面的值可以是常量数值或常量表达式,但不能是变量或变量表达式
4、default语句可以放在任意位置,也可以省略,default分支不需要break语句
-
循环语句:
1、使用for语句时,括号中的三个表达式必须用 分号隔开,三个表达式都可以省,但分号不能省
2、循环变量初始化可以在for语句之前初始化,也可以在循环体中进行循环变量变化
3、可以同时对两个变量进行初始化和变化 -
循环跳转语句
1、break语句,结束循环
2、continue语句,跳过循环体中剩余的语句,执行下一次循环 -
数组
1、数组的声明(两种方法)
int[] scores; //数据类型[] 数组名
String scores[]; //数据类型 数组名[]
2、分配空间
scores = new int[5]; //数组名 = 数据类型[数组长度]
3、赋值
scores[0] = 89;
scores[1] = 98;
...
4、使用数组
5、直接创建数组(两种方法)
int[] scores = {78, 89, 97, 88};
int[] scores = new int[]{78, 89, 97, 88};
6、使用Arrays类来操作数组
Arrays类是Java中提供的一个工具类,在java.util包中,该类中包含了一些方法来直接操作数组。
import java.util.Arrays;//导入包
public class Example {
public static void main(String[] args) {
int[] scores = {78, 89, 97, 88};
Arrays.sort(scores);
System.out.println(scores);//{78,88,89,97}
}
}
7、使用foreach来遍历数组
int[] scores = {78, 89, 97, 88};
for (int score : scores) {
System.out.println(score); //遍历输出数组中的元素
}
-
二维数组
1、声明数组并分配空间:
数据类型[][] 数组名 = new 数据类型[行数][列数](列数可以省略); -
方法
方法是用来解决一类问题的代码的有序组合,是一个功能模块。
1、定义方法的语句:
访问修饰符 返回值类型 方法名(参数列表){
方法体
}
2、访问修饰符:方法允许被访问的权限范围,可以是public、protected、private甚至可以省略,public表示方法可以被其他任何代码调用
3、返回值类型:没有返回值则指定类型为void,有返回值则指定返回值的类型
4、参数列表:多个参数要用逗号隔开,每个参数由参数类型和参数名组成,用空格隔开
- 生成随机数
//(数据类型)(最小值+Math.random()*(最大值-最小值+1))
int ran = (int)(1+Math.random()*(10-1+1));
- 命名规范
1、 项目名全部小写
2、 包名全部小写
3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写,大驼峰法
如:public class MyFirstClass{}
4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。
如:int index=0;
public void toString(){}
5、 常量名全部大写
如:public static final String GAME_COLOR=”RED”;
6、所有命名规则必须遵循以下规则:
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
4)、坚决不允许出现中文及拼音命名。
-
异常与错误
-
定义
异常就是在执行整个应用程序中出现的错误事件,会阻挡整个程序流程的正常执行。
异常: 是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。比如,在除法计算中,除数为0就是一种可以预测和可以恢复的异常,同样,数据库连接异常也是如此等。
错误: 表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现内存溢出错误(OutOfMemoryError). -
分类
RuntimeException(运行时异常):包括除数为0, 数组下标超界等。运行时异常的派生类有很多, 其产生频率较高. 它的派生类可以由程序处理或者抛给(throw) 给jvm处理. 例如上面的例子就是抛给了jvm处理, jvm把程序中断执行, 并把错误信息输出到终端上。(可以通过编译)
非运行时异常:这种异常必须由程序员手动处理,否则不通过编译。
自定义异常:为了表示应用程序的一些特定错误类型,为代码可能发生的一个或多个问题提供新的确切的含义。由软件开发者自己根据系统的需求而定义。 -
处理方式
处理异常:表示这个异常就地可以解决,一般通过try...catch...语句块来解决。
声明异常:表示这个异常在异常发生的地方无法解决,将其抛出去(用throw将锅甩给他人),并在方法定义中予以声明。
try...catch...finally...
语法:
-
try {
//code
} catch (ExceptionType typeName) {
// handle exception code
} finally {
// handle exception code
}
说明:
- try块:将一个或者多个语句放入try时,则表示这些语句可能抛出异常。编译器知道可能要发生异常,于是用一个特殊结构评估块内所有语句.
- catch块:当问题出现时,一种选择是定义代码块来处理问题,catch块的目的便在于此。catch块是try 块所产生异常的接收者。
- finally块:还可以定义finally块,无论运行try块代码的结果如何,该块里面的代码一定运行。在常见的所有环境中,finally块都将运行。无论try块是否运行完,无论是否产生异常,也无论是否在catch块中得到处理,finally 块都将执行。
规则: - 必须在try之后添加catch或finally块。try块后可同时接catch和finally块,但至少有一个块。
- 必须遵循块顺序:若代码同时使用catch和finally块,则必须将catch块放在try块之后。
- 一个try块可能有多个catch块。若如此,则执行第一个匹配块。
- 一个try块只能有一个finally块。
举个例子
public int getNumberFromArray(int[] array, int index) {
try {
return array[index];
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界异常:" + e);
}
}
运行结果: 当index超过array的长度时,捕获数组越界异常。
throws/throw 异常
声明异常表示调用某个方法会抛出异常,对这个方法来说,将这个异常抛给它的调用者。而且,也通知了编译器:该方法的任何调用者必须遵守处理或声明规则。
语法:
public returnType methodName(paramType param) throws ExceptionName {
// other code
throw new Exception...
}
规则如下:
- throws 关键字放在方法签名的尾部;
- 可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
- 一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
举个例子:
public int getNumberFromArray(int[] array, int index) throws ArrayIndexOutOfBoundsException {
if (index > array.length) {
throw new ArrayIndexOutOfBoundsException("数组越界异常");
}
return array[index];
}