|
java基础语法
1.1基本语法
- 大小写敏感
- 类名--首字母应大写,若由若干单词组成,则每个单词首字母大写
- 方法名--应以小写字母开头,若由若干单词组成,则后面的每个单词首字母大写
- 源文件名--必须与类名相同
- 主方法入口--由public static void main(String[] args)方法开始
1.2 标识符
类名、变量名以及方法名都被称为标识符
- 标识符应以字符(A-Z或a-z),$,或_开始
- 关键字不能作标识符
- 大小写敏感
1.3修饰符
使用修饰符修饰类中方法和属性
- 访问控制修饰符:default, public, protected, private
- 非访问控制修饰符:final, abstract, static, synchronized
1.4变量
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
1.5数组
存储在堆上的变量,可以保存多个类型
1.6枚举
限制变量只能是预先设定好的值
1.7 继承
一个类可由其他类派生,利用继承可重用已存在类的方法和属性,被继承的类为超类,派生类为子类
1.8Java对象和类
- 对象是类的实例;
- 创建对象的步骤:
- 声明(包括对象名称和类型)
- 实例化(使用关键字new来创建)
- 初始化(调用构造方法初始化对象)
- 类是一类对象的行为和状态
1.9java构造方法
名称必须与类同名,在创建一个对象时至少调用一个构造方法
java对象和类
2.1对象
对象是类的一个实例,有状态有行为
2.2类
- 局部变量:在方法、构造方法或语句块中定义的变量称为局部变量。方法结束后自动销毁
- 成员变量:定义在类中,方法体之外的变量。在创建对象时实例化,可被类中方法、构造方法和特定类的语句块访问
- 类变量:声明在类中,必须声明为static类型
2.3构造方法
创建一个对象时至少调用一个构造方法,构造方法名必须与类同名
2.4创建对象
对象时根据类创建的,java中使用new来创建新的对象,以下三步
- 声明:声明一个对象,包括对象名和类型
- 实例化:使用关键字new来创建一个对象
- 初始化:使用new创建对象时,调用构造方法初始化对象
java基础数据类型
基本数据类型直接存在堆中,引用数据类型存的是常量池地址
基本数据类型
数值型:
- 整数类型 -- byte, short, int, long
- 浮点类型 -- float, double
字符类型:char, 存放单个字符
布尔型:存放true, false
引用数据类型
引用类型指向一个对象,指向对象的变量是引用变量。对象、数组都是引用数据类型。默认值为null
- 类 class
- 接口 interface
- 数组 [ ]
数组
定义:可以存放多个同一类型的数据,数组就是一组数据。
数组的使用
- 动态初始化 数组类型[] 数组名=new 数据类型[大小]
- 动态初始化
- 先声明数组
- 数组名=new 数据类型[大小];
- int a[]; 或 int[] a;
- a=new int[10];
- 静态初始化
- 数据类型 数组名[] ={元素值, 元素值...}
- int a[] = {2, 5, 7, 9, 11}
数组使用注意事项和细节
- 数组是多个相同类型数据的组合
- 数组中元素可以是任何数据类型,包括基本类型和引用类型,但不能混用
- 数据创建后,若没有赋值,有默认值
- 使用数组步骤:1.声明数组并开辟空间 2.给数组各个元素赋值 3.使用数组
- 数组下标是从0开始的
- 数组下标必须在指定范围内使用后
- 数组属于引用类型,数组型数据是对象
数组赋值机制
- 基本数据类型赋值,只是具体的数据,相互不影响 -- 值拷贝
- int n1=10; n2=n1; n2=80; ==> n1=10, n2=80
- 数组在默认情况下是引用传递 ,赋的值是地址 -- 引用赋值
- int[] arr1={1, 2, 3}; int[] arr2=arr1; arr2[0]=10; ==> arr1={10, 2, 3}
数组扩容
- 定义一个新数组,长度为原数组长度+1
- 将原数组值一一拷贝,再将新增值赋到新数组最后一位
- 让原数组指向新数组
二维数组
定义:原来一维数组的每个元素是一维数组,就构成了二维数组 int[][]
- 二维数组的元素个数:arr.length
- 二维数组每个元素是一维数组,所以如果需要得到每个一维数组的值,还需要再次遍历
- 如果要访问第(i+1)个一维数组的第(j+1)个值:arr[j]
二维数组的使用:
- 动态初始化 类型[][] 数组名=new 类型[大小][大小]
- 先声明再定义 1.类型 数组名[][] 2.数组名=new 类型[大小][大小] 3.赋值
- 动态初始化 -- 列数不确定
- 一个有三个一维数组,每个一维数组元素个数不一样
- int[][] arr=new int[3][]; //列数不确定
- 静态初始化 定义 类型 数组名[][] = {{值1, 值2..},{值1, 值2..},{值1, 值2..}}
使用细节和注意事项:
- 声明方式 int[][] y 或 int[] y[] 或int y[][]
- 二维数组实际上是由多个一维数组组成的,它的各个一维数组长度可以相同也可以不相同
java常量
常量在程序运行时不能改变, Java 中使用 final 关键字来修饰常量。
final double PI = 3.1415927;数据类型转换
自动类型转换
要求:转换前数据类型的位数低于转换后的数据类型
char c1='a';
int i1=c1;//char自动转换为int强制类型转换
要求:转换的数据类型必须是兼容的
int i1=123;
byte b=(byte)i1;隐含强制类型转换
整数的默认类型是int;小数的默认是double,若需要float,必须在数字后面加F/f
java变量类型
类变量
独立于方法之外的变量,用 static 修饰;类变量也称为静态变量;静态变量是指声明为 public/private,final 和 static 类型的变量,初始化后不可改变;储存在静态存储区;可以通过:ClassName.VariableName的方式访问。
实例变量
独立于方法之外的变量,但没有 static 修饰;
局部变量
类的方法中的变量;声明在方法、构造方法或者语句块中;是在栈上分配的;只在声明它的方法、构造方法或者语句块中可见;
java switch case
- switch 语句中的变量类型可以是: byte、short、int 或者 char
- 可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
- case 语句中的值的数据类型必须与变量的数据类型相同
switch case执行时会先进行匹配,匹配成功返回当前case值,再根据是否有break判断是否继续输出或跳出判断
- 若case中没有break,JVM不会顺序输出每一个case返回值,而是继续匹配,匹配不成功则返回默认case
- 若case中没有break,匹配成功后,从当前case开始,后续所有case值都会输出
- 若case 中没有break,则从当前case开始后续所有case都会输出
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。continue 适用于任何循环控制结构中,让程序立刻跳转到下一次循环的迭代。
- break:跳出最里层的循环,并且继续执行该循环下面的语句
- continue:跳转到下一次循环的迭代
格式化字符串/数字
格式化数字:使用 printf() 和 format() 方法
- 格式化字符串:使用静态方法 format() 返回一个String 对象,创建可复用的格式化字符串
Java StringBuffer和StringBuilder类
当对字符串进行修改时需要使用StringBuffer和StringBuilder,字符串对象不能被修改,但该类创建的对象能被多次修改。
- StringBuffer:每次会对SBuffer对象本身进行操作,要对字符串修改时推荐使用。
- StringBuilder:不是线程安全的(不能同步访问),有速度优势,多数情况下建议使用
Java正则表达式
定义字符串模式;用来搜索、编辑或处理文本
- Pattern 类:一个正则表达式的便已表示,没有公共构造方法。需要调佣公共静态编译方法,返回一个pattern对象
- Matcher 类:对输入字符串进行解释和匹配操作的引擎,没有公共构造方法。需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
- PatternSyntaxException:非强制异常类,表示一个正则表达式模式中的语法错误
捕获组
把多个字符当一个单独单元进行处理的方法,通过对括号内的字符分组来创建,通过从左至右计算其开括号来编号。可以通过matcher对象的groupCount查看表达式有多少个分组
group(0)代表整个表达式
正则表达式语法
'\\' 表示插入一个正则表达式的反斜线,java中需要两个反斜杠才能被解析为转义作用。具体语法:https://www.runoob.com/java/java-regular-expressions.html
java方法
java方法是语句的集合,一起执行一个功能;是解决一类问题的步骤的有序组合;包含于类或对象中;在程序中被创建,在其他地方被引用
定义
修饰符 返回值类型 方法名(参数类型 参数名){
方法体;
return 返回值;
}

静态方法
当一个方法是static时,就是一个静态方法,静态方法可以直接通过类名调用
方法重载(overload)
允许同一个类中,多个方法名相同,但要求形参列表不一致
某方法适用于int型数据,当我们需要用于其他数据类型时,创建另一个有相同名字但参数不同的方法。如果传递的是int型参数,则int型参数的方法体会被调用;传递的是double型参数,则double型参数的方法体会被调用,这叫做方法重载
一个类的两个方法拥有相同的名字,但是有不同的参数列表
构造方法
构造方法用于初始化对象,和它所在类名相同,但没有返回值。通常使用构造方法对类的实例变量赋初值,或执行其它必要步骤创建一个完整的对象。
当创建一个有参构造器,原先默认的无参构造器会被覆盖
finalize()方法
在对象被垃圾收集器析构(回收)之前调用,用于清除回收对象。在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
语法:
protected void finalize() {
// 在这里终结代码
}关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用
java流、文件和IO
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
读取控制台输入
控制台输入由http://System.in完成,为了获得一个绑定到控制台的字符流,可以把http://System.in包装在一个BufferReader对象中来创建一个字符流。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))BufferedReader 对象创建后,就可以使用read()/readLine()从控制台读取一个字符/字符串,
读取多字符输入:int read() throws IOException,每次调用read(),它从输入流读取一个字符并把该字符作为整数值返回,当流结束的时候返回 -1。该方法抛出 IOException。
读取字符串:String readLine() throw IOException
控制台输出
控制台的输出由 print( ) 和 println() 完成,PrintStream 继承了 OutputStream类,并且实现了方法 write()。这样,write() 也可以用来往控制台写操作。write() 后要紧跟换行符输出语句。
读写文件

FileInputStream
该流用于从文件读取数据
InputStream f = new FileInputStream("C:/java`/hello");
也可以使用一个文件对象创建一个输入流对象来读取文件
File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
FileOutputStream
该流用于创建一个文件并向文件中写数据
OutputStream f = new FileOutputStream();//使用字符串类型的文件名来创建一个输出流对象:
也可以使用一个文件对象来创建一个输出流来写文件。
File f = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(f);
JavaScanner类
next()和nextLine()的区别:
next():
- 读取到有效字符后才可结束输入
- 对输入有效字符之前遇到的空白,next()会自动去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
- 不能得到带有空格的字符串
nextLine():
- 以enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
异常处理
- 检查性异常--用户错误或问题引起的异常,例如要打开一个不存在的文件,在编译时不能被简单地忽略
- 运行时异常--运行时异常可以在编译时被忽略
- 错误--不是异常
Exception类层次
Exception类是Throwable类的子类,Throwable的另一个子类是Error

捕获异常
使用try和catch可以捕获异常,try/catch代码块中的代码称为保护代码。
Catch 语句包含要捕获异常类型的声明,当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查
throws/throw 关键字
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部,也可以使用 throw 关键字抛出一个异常
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
finally关键字
用来创建在 try 代码块后面执行的代码块,无论是否发生异常,finally 代码块中的代码总会被执行,finally代码块可以运行清理类型等收尾善后性质的语句
try, catch, finally 块之间不能添加任何代码
try-with-resources
打开资源并在语句执行完毕后确保每个资源被自动关闭
try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
while ((line = br.readLine()) != null) {
System.out.println("Line =>"+line);
}
} catch (IOException e) {
System.out.println("IOException in try block =>" + e.getMessage());
}
}try-with-resources语句中可以声明多个资源,用";"分隔各个资源,多个资源声明时,try-with-resources以相反的顺序关闭资源
try (Scanner scanner = new Scanner(new File("testRead.txt"));
PrintWriter writer = new PrintWriter(new File("testWrite.txt")))声明自定义异常
- 所有异常必须是Throwable的子类
- 若希望写一个检查性异常类,则需要继承Exception类
- 若希望写一个运行时异常类,则需要继承RuntimeException类
通用异常
- JVM异常:由 JVM 抛出的异常或错误。
- 程序级异常:由程序或者API程序抛出的异常。
|
|