文章目录
⭐代码和思维导图详见仓库:Sivan_Xin的代码仓库—Java语法。如果觉得有帮助的话,可以帮作者点一个star⭐哦~
🎉 关于Java语法部分的知识体系主要分三篇文章进行讲解:
🎉【基础语法篇】【面向对象篇】【高级语法篇】
🎉大家可以在日常的学习生活中进行参考,笔记内容并不是绝对权威,所以请保持自己独立思考的能力。
本文共5600字,读完约需12分钟。
基本语法
初识JDK
JDK
:jdk是java软件开发工具包,包含jre和JAVA工具。
-
JAVA工具:
javac:JAVA编译器(程序—字节码);
java:JAVA解释器(解释编译后的字节码文件);
jdb:JAVA调试器;
javadoc:文档生成器。 -
jre:
JAVA运行环境,包括jvm和系统类库等。
ps:本文使用JDK8的版本。
输入与输出
.
是一个运算符,它可以让类或者对象做事情,看不懂也没有关系,可以先记下来。
从输出设备(显示屏)输出:
System.out.println("Hello World"); //换行输出
System.out.print("Hello World"); //普通输出
System.out.printf("%.2f",a); //对结果取2位小数输出
System.out.println("2+3="+(2+3)); // +用来连接字符串
从输入设备(键盘)输入:
Scanner in = new Scanner(System.in); //关于这句话,会在面向对象篇详细介绍。
in.nextInt(); //读入 一个int型的数据。
in.nextDouble(); //读入 一个double型的数据。
in.nextLine() //读入 一行。
in.next(); //读入 获取有效字符到结束字符之间的内容。
in.hasNext(); //判断是否有输入数据,如果有,则返回true,并将所输入的数据读取备用。
in.hasNextInt(); //判断输入的数据是否为int,如是返回true,不是返回false。
条件与循环
- Java与C相同的地方
if-else
for
do-while
while
switch-case
语句
关于这些语句的用法,可以参考这篇文章:C语言学习必备笔记
跳出多重循环 —标号的使用:
OUT: //标号,说明下面的循环叫这个名字。
for(int i=1;i<10;i++) {
for(int j=1;j<10;j++) {
break OUT; //跳出OUT标号的循环
}
}
增强for循环(for—each):
不可以拿来修改数组的值,但是可以拿来做遍历。
for(<类型> <类型名称>:<数组>) {}
//使用for—each循环遍历数组:
for(int i:a){ //循环的每一轮,让i等于a数组中的值。依次向下。
System.out.print(i+" ");
}
一维数组与二维数组
< 类型 > [ ] < 变量名称 > = new int [ 元素个数 ];
- 数组的定义:
int [] a = new int [10]
,就创建了一个有10个元素的数组。 - 获取数组的长度:
<数组变量名称.length>
扩展:
数组之间的赋值就是管理权限的赋予。
- b得到a的管理权限实例
public static void main(String[] args) {
int []a={1,2,3};
int []b={1,2,3};
if(a.equals(b)){
System.out.println("1");
}
if(a==b){
System.out.println("2");
}
a=b; //赋予管理权限。
if(a.equals(b)){
System.out.println("a");
}
if(a==b){
System.out.println("b");
}
}
输出结果:a
b
在java中,数组变量与其他普通变量不同,数组变量充当一个管理者,管理存放数组的那个区域。
二维数组:
- 定义二维数组:
int [] []a =new int [3][5];
,可以理解为三行五列的矩阵。 - 二维数组初始化:
int [][]a={{1,2,3},{1,2,3}};
扩展:
- 二维数组遍历的两种方法
public class demo {
public static void main(String[] args) {
int [][]a=new int[11][11];
a[1][2]=2;
a[2][3]=1;
//法一
for(int []row: a){
for(int date:row){
System.out.printf("%d\t",date);
}
System.out.println();
}
//法二
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
System.out.printf("%d\t",a[i][j]);
}
System.out.println();
}
}
}
函数及其他补充
在Java中,调用函数又叫调用方法。这里只介绍Java中最简单的使用函数语法。
/*函数定义*/
public static void main (int a,int b){ 函数体 }
访问修饰符 修饰关键字 函数类型 函数名称 参数表
/*函数调用*/
函数名(a,b);
一些补充:
/* 布尔类型 */
boolean isprime = true;
if(isprime){
......
}
/* 逻辑运算的结果是true/false。 */
/*浮点数运算误差*/
double a=0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
double b=1.0;
System.out.println(a==b); //a=0.999999...
//判断两浮点数是否相等。
System.out.println(Math.abs(a-b)<1e-6); //abs为取绝对值。
Java常用类
Number&Math类
Java为每一个普通类型都提供了一个包裹类型。因为在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。
所有的包装类 (Integer、Long、Byte、Double、Float、Short) 都是抽象类 Number 的子类。
- 装箱与拆箱
这种由编译器特别支持的包装称为装箱,当数据类型被当作对象使用时,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置数据类型。
基础类型 | 包裹类型 |
---|---|
boolean | Boolean |
char | Character |
int | Integer |
double | Double |
float | Float |
-
Integer类型的缓存
Integer类型在-128到127之间的范围被缓存,如果创建这个范围的两个值相同的对象,每个对象地址相同,但是超过127,会重新new一个对象,此时每个对象地址不相同。 -
包装类的API
API详见:包装类API文档
Math:
Java 的 Math 包含了用于执行基本数学运算的属性和方法。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
Arrays类
Arrays类经常用于对数组的操作中。
String类
String
不是基础类型,它是java提供的一个类。String与数组类似,作为管理者管理数据。
关于==和equals
String s1=new String("123");
String s2=new String("123");
//判断两个String是否是同一地址:s1==s2 false
//判断两个String的内容是否相同:s1.equals(s2) true
String类中重写了equals方法,所以比较的是内容。
更多详细情况请参考下面的文章: 浅谈Java中的内存
- String类API
详见:Java String类官方文档
其他类
自己可以去JDK的官方文档中去了解,这里举出一些常用的类。
Object
Java中所有的类都是从Object继承的,也就是所有类的父类。进而可知,所有其他类都可以使用/重写Object类的方法。
- 常用的Object类的方法
toString
方法,用来显示对象的字符串形式。equal()
方法,在Object类中的equals方法只是简单地比较地址是否相等。
而多数Java类中实现了重写equals方法,使其比较内容是否相等。在比较两个对象是否相等时,一般使用equals方法,当然前提是对象所属的类已经重写equals了。hashCode()
方法,一般在HashMap中重写,如果自定义类使用了HashMap,那么它也需要重写hashCode。clone()
方法:clone 方法是浅拷贝,对象的引用类型引用同一个对象,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
如果某一个类的成员变量不是原始变量(八大基本类型)或者不可变类(如String、包装类型),必须通过深度clone(生成一个不同于原对象成员变量的成员变量)来确保成员变量的不可变性。
注意:使用clone方法要先实现Clonable接口,再重写Object中的clone。
异常处理
Java语言执行中发生的不正常的情况称为异常。
在Throwable异常下分为两种:
- Error:Java虚拟机无法解决的严重问题。不编写针对的代码处理。
- Exception:因编程错误或偶然的外在因素导致的一般性问题。可以用代码处理。Exception又分为编译时异常(IOException)和运行时异常(RuntimeException)
常见异常
运行时异常:
ArrayIndexOutOfBoundsException
用非法索引访问数组时抛出的异常。NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。NumberFormatException
数据格式异常ClassCastException
当试图将对象强制转换为不是实例的子类时,抛出该异常。
编译时异常:
- IOException
FileNotFoundException
:表示尝试打开由指定路径名表示的文件失败。 - SQLException
异常的处理
过程一:“抛”。程序执行中若碰到异常,就会在异常代码处生成对应异常类的对象,并将对象抛出。
生成异常类的对象有两种方式:
- 自动生成的异常对象。
- 手动生成一个异常对象,并throw。
过程二:“抓”。异常的处理方式。
处理异常有两种方式:
- try-catch-finally:真正解决异常。
- throws:向上抛出异常,但是没有处理。
(具体操作在源程序中指出)
处理异常的几点注意:
- 在方法重写中,子类重写的方法抛出的异常不能大于父类被重写的方法抛出的异常。
- 对于运行时异常一般不用try-catch。编译时异常才会使用try-catch。
- 处理异常的方法
getMessage()
和printStackTrace()
来返回异常信息。
throw
表示生成一个异常对象。
- 如果生成的是运行时异常对象,则在运行中直接抛出。
- 如果生成的是编译时异常对象,需要在方法中抛出,并且在main方法中捕获。
用户自定义异常类
- 自定义异常类需要继承父类Exception/RunTimeException。
- 自定义异常类需要一个ID作为标识。
- 自定义异常类一般需要两个构造器,一个无参,一个带参。
⭐码字不易,求个关注⭐
⭐点个收藏不迷路哦~⭐