java基础复习
半年以上没有碰java了,很多都不记得了,快速简单学习复习一下,可能有错误太急了
转义字符
\一个就是代表转义的意思
\t 制表符
\n 换行符
两个\输出\
\ "把字符型的"转义成普通的字符串引号
\ r 把前面一个字符替换成后面一个字符
变量
int a=10; //变量整形
int c=2;
String b="字符串"; //常量字符串
// 字符串可以和任意一个数字或字符串进行拼接
System.out.println(a+b+"可以拼接");
// 整数型基本运算
System.out.println(a+c);
System.out.println(a-c);
System.out.println(a*c);
System.out.println(a/c);
Byte和Short的区别
Byte和Short的区别,Byte占一个字节,Short占两个字节
float和double的区别
float在后面加上f,double在后面加上d,double的精度可以保留很多,float精度没有double多,多的尾数会被删掉
// 对小数进行除法运算的时候精度无法精准,进行判断
if(Math.abs(2.7/(8.1/3))<0.00001){ // 进行求差的绝对值进行判断
System.out.println("相等");
}
char,字符类型
char a='a'; // 输出的a
char b=97; //输出的是ascll中对应的a
char c='许'; //输出的还是许,但是是在ascll中对应编码的字符
char d='\t' //输出的是制表空格
boolean,布尔值
布尔值在java中的类型名称boolean其中只有两个 一个true一个false
自动类型转化和强制类型转换
char --> int --> long -->float --> double
byte --> short --> int --> long --> float --> double
以上就是转换方式从左到右递增,高精度的可以承载低精度的,但是如果反方向用()强制降级可能会造成精度损失
在进行以上不同数据类型运算的时候,低精度的会自动向当中最高精度转换在进行运算
高进度强转到低精度
int i = (int)1.9
String字符串类型转换
对数值进行转换字符串的时候只需要加上一个空字符串就可以
字符串数值类型转化数值类型
Integer.parseInt(“123”) //转换成整数型
Double.parseInt(“123”) // 转换成双精度浮点
Float.parseInt(“123”)// 转换成单精度浮点
字符串中方法获取指定索引字符
“hello”.charAt(0) // 获取下标0的字符h
除法运算
10/3 //都是整数返回的结果保留整数
10.0/3 //有一个是浮点数,返回的结果就变成浮点数
把整数转换成高精度的浮点型返回的结果是.0
取模运算
a%b=a-(a/b*b)java取余运算方式
10%3 等于1
-10%3 等于-1
10%(-3)等于-1
-10%(-3)等于-1 //都是负数的时候返回的都是负数,不存在负负得正
自增
int i=1;
i++; //i变成2
++i; //i变成3
++在前和在后最后都是对原数进行+1操作,在前的时候是先进行对原数进行+1在进行运算,在后是先使用原数进行运算在进行+1
逻辑运算符
& ----- && ----- |-----||------ ! ------ ^
&和&&都是and的意思,细微上还是有区别,&前一个不满足第二个还是会判断,&&有短路的操作,第一个不满足则就是false
|和||和&和&&的方式一样,|和||是or或的意思
!取反,fasle变成true,true变成false
赋值
int a =1; //把1赋值给int类型变量a
int b =1;
b+=a; // 等于b=b+a;修改原值
三元运算符
a > b ? “对”:“错”
Scanner键盘录入
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
sc.nextInt(); // 键盘录入数字
sc.nextDouble(); // 键盘录入浮点型
位运算符
& | ~ ^ 位移运算符
Switch
switch("a"){
case "a":
System.out.println("a");
break;
case "b":
System.out.println("b");
break;
case "c":
System.out.println("c");
break;
default:
System.out.println("d");
}
//如果匹配就满足,没有一个匹配的就是d,注意如果没有break会有穿透效果
For循环
for (int i=0;i<10;i++){}
for(;😉{} //无限循环
while循环
while (条件表达式){}
需要我们指定停止条件
Do while循环
do{}while(条件表达式)
必定执行一次do里的代码,在进行判断再接着循环
增强for
int[] arr={1,3,4,5,612}
for (int x:arr){//x是每一个元素}
continue和break和return
continue跳出本次执行代码不执行下面的代码
break终止整个判断的运行,或者中止循环等判断条件
return中止整个函数的运行
方法
定义在类里的
public static 返回值类型 方法名(参数){return 返回值类型的值}
void没有返回值,有其他返回值的需要return对应类型的值
方法重载
相同名称方法参数不一样,返回值类型不一样
方法参数任意(可变参数)
void add(int…nums) {} //三个点,代表我们可以传入一个或者n个,且有多个参数的时候需要把任意个数参数放到后面
递归
调用的方法内再调用当前方法就叫递归
递归需要有判断头,否则会栈溢出
数组
int[] arr = {1,4,5}
int arr[] = {1,2,3}
int[] arr1 = new int[12]
// 把一个数组直接赋值给另一个数组的时候复制的是引用Arrays数组工具类
构造器
跟类名同名的方法没有返回值,可以有重载
继承
extends关键字进行继承,继承的子类可以使用父类的非私有属性和方法,同样也可以使用构造器
重写
静态方法的调用方法看左边,非静态的看重写
多态
继承的父类可以用来作为子类的类型,调用重写的方法的时候还是右边的类如果有就调用当前类的,如果没有就往上查找
当使用父类作为子类的类型的时候,只能使用父类的方法和属性,如果有重写的就是用子类的
多态的时候获取属性,看的是等号左边的,调用方法的时候是看右边的
调用方法的时候看左边,如果有重写看右边
抽象类
public abstract class Action {} // 使用abstract关键字修饰的
继承了抽象类的子类如果不一样是抽象类那么就都需要实现抽象类里的所有方法
不能创建,只能子类实现
接口
接口就是规范
使用interface修饰的类就是接口类
接口里定义的方法都是抽象的且不能有方法体{}
子类使用implements来实现接口的时候也需要继承实现里面的方法
内部类
在一个类里面再定义一个类就叫内部类
创建内部类的方法:先new 一个外部类再使用外部类.new 内部类()创建
内部类可以操作外部类的私有属性私有方法
equals和==区别
==是判断值是否相等,equals判断的是引用类型是否相等
静态类变量
static int count; //当前类类型所有相同类全局静态属性
代码块
用{}包裹的就是代码块
类中的代码块,直接在类中的代码块,在调用静态成员和方法的时候不会执行代码块,只有在创建类的时候才会进行创建
如果代码块也是静态的在调用静态成员的时候就会有先执行代码块里的内容
继承情况下相同的静态代码块也会优先执行父类的
父类静态代码块-----子类静态代码块------父类普通代码块-----父类构造方法------子类普通代码块-----子类构造方法
异常
Exception和Error
程序在运行过程中出现的异常都是运行时异常
在编译的时候就出现的错误就是Error
大部分遇到的是运行时异常,这都是可以在程序中抓取异常进行处理
异常处理关键字: try catch finally throw throws
finally 不论try是否捕获到异常都会执行里面的代码
throw 主动抛出一个异常