Java学习之路 之 提问及解决篇

一:static 为什么不能定义在方法里

解答:
第一个方面:
static是成员变量及方法的修饰符,是属于类本身的数据字段
第二个方面:
在方法体中定义的变量称之为局部变量,方法体执行结束后,局部变量会自动销毁。
而static 定义的变量是一个静态的变量,它的作用肯定是为了让这个变量内外界都能被访问或读写,所以我们只能在类中去使用static 关键字
结论:
static关键字,只能用来定义成员变量和成员方法。
不能定义局部变量

二:“&&”与 “&”都表示”逻辑与“,那么它们之间的区别在哪里呢?

解答:
“&”会判断两边表达式是否都为true或flase,才会得出最终结果,被称为“非短路”运算符。
“&&”当第一个表达式为 false 时,则不会去判断第二个表达式,被称为“短路”运算符。

三:三元运算符的好处体现在哪里?

解答: 拿三元与 if 代码做比较如下
【1】
boolean b = 20<45?true:false;
【2】
if(20<45)
System.out.println(“true”);
else
System.out.println(“false”);

一行代码就解决了四行代码解决的问题

四:String-Builder与String 区别

“+”虽然可以附加新字符或字符串,但“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。

那么我们要反复进行修改字符串,且不想大量消耗系统时该怎么做?

解决办法: 使用 String-Builder类,大大提高了频繁增加字符串的效率

五:Java 虚拟机内存消耗待尽,如何解决?

如果Java 虚拟机内存消耗待尽,它将不会执行垃圾回收处理,这种时候该怎么办呢?

解决: Java 提供了 System.gc() 方法来强制启动垃圾回收器

六:异常

class MyException extends Exception{		//创建自定义异常类
	String message;					//定义 String 类型变量
	public MyException(String ErrorMessage) {	//父类方法
		message = ErrorMessage;
	}
	public String getMessage() {
		return message;
	}
}

public class Captor {			//创建类
	
	static int quotient(int x,int y)throws MyException{	//定义方法抛出异常
		if(y<0) {							//判断参数是否小于0
			throw new MyException("除数不能是负数");	//异常信息
		}
		return x/y;
	}
	
	
	public static void main(String[] args) {
		try {									//try 语句包含可能发生异常的语句
			int result = quotient(3,0);
		}catch (MyException e) {				//处理自定义异常
			System.out.println(e.getMessage());
		}catch(ArithmeticException e) {			//处理 ArithmeticException 异常
			System.out.println("除数不能为0");
		}catch (Exception e) {					//处理其他异常
			System.out.println("程序发生了其他的异常");
		}
	}
	
}

提问: 我不太能理解,为什么我调用quotient()方法并传递3和0两个参数进去后,该方法明明是针对抛出异常交给 MyException 来进行处理
那么当经过代码 return x/y 时,会发生异常,但为什么却是交给 catch(ArithmeticException e) 这个语句块里执行,不太明白,明明不是抛出给MyException 来进行处理吗。

经过我自己的思考后,我是这么理解的:

角度一:
抛出的异常类型为 ArithmeticException 所以会交给catch(ArithmeticException e)来执行
角度二:
在代码执行中,若出现了系统自带的异常,则优先处理系统自带的,而不会交给抛出的指定异常类才处理。
角度三:
return x/y; 这条代码发生了异常,它并没有抛出给方法外给 MyException 来处理,而是由系统直接拦截后锁定为 ArithmeticException 异常类型后,所以会由catch(ArithmeticException e)来执行

七:集合与数组区别

1、数组的长度是固定的,集合的长度是可变的
2、数组用来存放基本类型的数据,集合用来存放对象的引用

八:为何需要实现Comparable接口,Comparable 接口的意义和用法

为何需要实现Comparable接口,Comparable 接口的意义和用法(这篇博客写的淋淋尽致,感谢博主分享)

九:java中System.in.read();是什么意思

System.in.read()可以实现输入字符,返回字符的Unicode码,但是缺点是只能输入一个字符
System.in.read() 返回的是输入数值的 ASKII 码(一个 int 整数)。

十:getClass()的作用

getClass() 返回此 Object 的运行时该对象的类. 该方法返回一个Class对象, 可以通过该对象可以获取某个类的相关信息, 如构造方法 属性 方法 等。

举例:
class Student{

}

那么:
Student s = new Student();
s.getClass() 得到的是内存中实实在在存在的Student 这个类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王睿丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值