1.++ ,- -的前后顺序问题
int x1=5,x2=5;
int y1=x1++;//先将x1赋值给y1,再x1自增,此时 y1=5,x=6
int y2=++2x;//先将x2自增,再赋值给y2,此时y2=6,x=6
2.负数取模问题
如果对负数取模,可以把模数负号忽略。但被模数为负数则不可忽略。此外,取模运算的结果不一定总数整数
int x1=23,y1=-10;
int z1=x1%y1;//y1为负数的情况下,可以忽略,z1值依然为正数3
int x2=-23,y2=10;
int z2=x2%y2;//x2为被模数,不可以忽略负号,z2的值应该为-3
int x3=-23,y3=-10;
int z3=x3%y3;//z3结果为-3,y3忽略负号,本质和上条一致
3.&& 与& ,| 与 ||的区别
&&(逻辑and)中 先计算&&左边的结果,如果为false,则不需要计算右边,结果为false,
& 则需要两边都计算结果
在实际业务开发中,如果不需要计算右边的逻辑,则优先选择&&
|| (逻辑or)同理
4.三元运算符
格式为 (条件表达式)?表达式1:表达式2;
条件表达式 为true ,则为表达式1,false为表达式2
int a=10,b=9;
int c=(a==b)?8:9;//如果a==b为true ,则 int c=8,false 为9
5.运算符优先级
6.几种取小数位数的方法
①使用String.format()方法
double r=6.7;
double v=4.0/3*Math.PI*r*r*r;//4.0为了保证4/3输出正常的double,而不是int
System.out.println("体积为"+String.format("%.2f",v))//打印输出时保留两位小数
②使用DecimalFormat 类中的format
import java.text.DecimalFormat;//导入DecimalFormat方法
class Demo {
public static void main(String[] args){
int r=6.7;
double v=4.0/3*Math.PI*r*r*r;
DecimalFormat df=new DecimalFormal("#.##");//创建新对象
String s=df.format(v);//使用方法后输出为String类型
System.out.println("v="+s);//打印输出
}
}
7.随机数获取
java获取随机数,可以利用java.util.Random类下的next方法来获取(int可以指定范围)
//获取随机整数
import java.util.Random;
class Demo{
public static void main(String[] args){
Random ra=new Random();
int i=ra.nextInt(100);//获取100以内的随机数[0,n)包括0,不包括n
double d=ra.nextDouble();//获取[0,1)之间的随机数,可以加1或者加其他数来获得其他区间的小数
}
}
8.switch case 向下贯穿问题
如果不及时在代码后加上break,会继续向下执行所有的代码块
int x="big";
switch (x)//只可使用 byte,short,int ,char,String(JDK1.8+) 类型的常量
case "small":
System.out.println(x+"=small");
break;
case "big":
System.out.println(x+"=big");
break;//如果此处没有加上break,则程序继续向下贯穿执行所有case下的代码
case "mid":
System.out.println(x+"=mid");
break;
9.integer类的常见方法(持续更新)
1.将String转换成int,使用 Integer.parseInt()
String st="2021";
int i=Integer.parseInt(st);//转换为int类型,i=2021
将String转换成其他类型,使用的类和方法仿照1,如下图
10.String类常用方法(持续更新)
1.截取字段 substring()
String st="bestJavaDeveloper";
String st2=substring(2,5);//输出stJ
11.Math类常见用法(持续更新)
①Math.PI 圆周率π
double r=5.6;
double v=4.0/3*Math.PI*r*r*r;//计算圆球的体积
②Math.max(),Math.min()比较两个参数的大小
int a=65;
int b=45;
int c=22;
int temp=Math.min(a,b);
temp=Math.min(temp,c);//输出三个数中最小的数
③Math.pow(a, b) 计算a的b次方
int a=3;
int b=2;
double c=Math.pow(a,b);//输出为double类型
④Math.random();是令系统随机选取[0.0,1.0)的 double 值(另外也有java.util.Random下的nextDouble()也可以取到)
int m=2,n=3;
double t=Math.random();
double x=Math.random()*(n-m)+m;//取到m-n之间的随机数
12.break,coutinue,return 用法
1.break 默认跳出最里层循环,就是break最近的那层
for(int i=1;i<=5;i++){
for(int j=1;j<=3;j++){
if(i==3){
System.out.println("----end----");
break;//此处加break只跳出最里层的循环,外层循环依然进行,结果如下图
}
System.out.println("----"+i+"----"+j+"----");
}
}
结果如图,可以看到跳出了i==3的那层打印,依然进行了外层循环
如果要针对某层循环进行跳出,可以在循环上添加标识来具体跳出某层,如下
class Demo{
public static void main(String[] args){
out1:
for(int i=1;i<=5;i++){
out2:
for(int j=1;j<=3;j++){
out3:
for(int m=1;m<=2;m++){
System.out.println("--"+i+"--"+j+"--"+m+"--");
if(i==3){
System.out.println("---end---");
break out2;//跳出第二层循环
}
}
}
}
}
}
2.continue 结束当前循环进入下一次循环
class Demo{
public static void main(String[] args){
for(int i=1;i<=3;i++){
for(int j=1;j<=2;j++){
for(int m=1;m<=1;m++){
System.out.println("--"+i+"--"+j+"--"+m+"--");
if(i==3){
System.out.println("---end---");
continue;
}
}
}
}
}
}
3.return 结束当前无返回值的方法
class Demo{
public static void main(String[] args){
for(int i=1;i<=3;i++){
for(int j=1;j<=2;j++){
for(int m=1;m<=1;m++){
System.out.println("--"+i+"--"+j+"--"+m+"--");
if(i==3){
System.out.println("---end---");
return;//结束运行
}
}
}
}
}
}
13.Arrays类常用方法
①Arrays.toString,对数组内容直接进行打印
int[] a= {1,2,3,4,5};
System.out.println(Arrays.toString(a));
另外,toString()支持的类型如下
②Arrays.sort();对数组进行升序排序
int[] a= {7,6,5,4,3,2,1};
System.out.println(Arrays.toString(a));
Arrays.sort(a);//对数组a进行升序排序
System.out.println(Arrays.toString(a));
结果
③Arrays.copyOf(目标数组,截取位数);
//截取数组a长度为4,赋值到b
int[]b=new int[10];
b=Arrays.copyOf(a, 4);//Arrays.copyof(目标数组a,截取位数(a[0]-a[3]))
④Arrays.copyOfRange();
int c=new int[10];
c=Arrays.copyOfRange(a, 3, 6);//从a[3]-a[6]
其他类似的复制数组的方法有
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,复制的长度)
int[] a= {23,123,1,53,2,523};
int[] b= {43,12,99,54,9};
int[] c= new int[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);//从a[0]开始复制,到数组c,数组c从0开始,复制长度为a.length
System.arraycopy(b, 0, c, a.length,b.length);
14 权限修饰符(public protected default private)
其中,public 和 protected 都可以跨包使用,但是protected 必须要先继承才能使用,而且只能继承后使用子类的实例进行调用,不可以使用父类的实例进行调用,通常protected用来设计父类的属性和方法
default (friendly)则是当前包可以用,不允许跨包
private 当前类可以用
15 继承
①子类不能继承父类的构造方法
②一个子类只能有一个父类(单继承)
③私有的private 是不可以继承的
16 重写(override)
①重写的返回值类型,方法名,参数列表必须相同,子类的权限修饰必须大于等于父类
public >protected >default >private
②父类的私有方法不可以被重写
17 super关键字
①super.在子类中调用父类的属性和方法,为了区分子类和父类的方法和属性,(建议子类中调用父类需要加上,增加识别度)
②super() 只能出现在构造器内,并且出现在首行,代表调用父类的构造器
其实子类继承父类时,默认是使用super()来进行调用父类无参构造器
如果父类设计构造方法时,设置了有参,未设置无参,则继承时,子类super(需要写参数)
③this() 和super()不能同时出现,,this()调用本类中的构造器 ,super()是调用父类的
构造器,都要求出现在首行,无法同时出现在首行
18.基本数据类型常量池