新手Java易混淆点记录

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.运算符优先级

图片来源于千峰教育刘颖老师ppt截图

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.基本数据类型常量池
made by darius-wu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值