(1)内部类的使用
内部类属于一个类中重新定义的类,这个类一般是外部内来访问,不支持外部类的其他类进行使用,因此常通过函数的形式来调用,基本形式如下:
package Test;
public class Outer {
int num=10;
public void method(){
int num2=1;
class inner{
public void show(){
System.out.println("内部类的show方法");
System.out.println("访问外部类的变量:"+num);
System.out.println("访问内部类的变量:"+num2);
}
}
inner i=new inner();
i.show();
}
}
另外,给出匿名类部类的使用方法,注意这里的匿名指的是没有变量来承载对应的类,不是真的没有名字:
//创建一个初始化的抽象类
abstract public class Init {
abstract public void show();
}
//outer类中定义方法
public void show(Init test){
test.show();
}
//每次使用的时候直接实例化类
Outer out =new Outer();
out.show(new Init() {
@Override
public void show() {
System.out.println("重写一个show方法");
}
});
//比起常规方法来说要简洁很多,不然的话我们还需要去继承init类,然后重写里面的方法
//对于继承的方法使用次数不多的可以考虑这种简化的形式
(2)常用的对象及其对应的方法
//Math对象
Math.floor()向下取整 Math.ceil()向上取整
Math.round()四舍五入 Math.abs()取绝对值
Math.random()0-1随机数 Math.pow()指数函数注意是double类型参数
//System对象
//获取时间戳:currentTimeMillis(),可用于计算算法运行事件
long start=System.currentTimeMillis();
for(int i=0;i<10000;i++){
System.out.println(i);
}
long end=System.currentTimeMillis();
System.out.println("输出当前耗时:"+(end-start)+"毫秒");
(3)对象的toString方法与equels方法
每个class都会去继承一个toString方法,该方法使用方法如下:
demo test=new demo(); System.out.println(test.toString()); //Test.demo@43a25848(包名.类名+@+hashcode) //hashcode即对应地址空间
equels方法也一样,需要注意的是,equels方法比较的时候会去比较hashcode。如果想要撤掉这个hashcode比较,可以利用idea快速创建equels比较方法,首先利用alt+insert重写equels和hashcode方法,然后删除其中的hashcode方法。
(4)String与Int类型的转换方式
//String->Integer->int(利用Integer作为中间桥梁)
String str="123";
Integer temp=Integer.valueOf(str);//利用给定str构建一个Integer对象
int number=temp.intValue();//获取Integer里面的整型数据
System.out.println("输出转化之后的结果:"+number);
//String->int(利用parseInt函数)
String str="123";
int number = Integer.parseInt(str);
//int->String
int number=10;
String str=String.valueOf(number);
//int->String 巧妙利用字符串拼接重载的+运算符
int number=10;
String str=""+number;
(4)异常处理
Java中的异常分为Erorr异常和Exception异常,Exception又分为运行时异常和非运行时异常。对于Error异常属于比较严重的错误,不需要在代码中处理这种错误,主要处理的还是Exception异常。
通常情况下,遇到了异常,程序会将异常信息打印在控制台并终止程序的执行。有些时候这些异常可能没有那么严重,只是编译器提示我们可能会出错,最终导致编译无法通过。或者我们希望这种异常能够更加友好不会直接种终止整个程序的执行。给出如下示例:
String time="2021-11-07";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM--dd");
Date d=sdf.parse(time);//由于这里的parse检测到可能time的格式和上面时间对象设置的格式不匹配
//不处理将连编译也无法通过
System.out.println("输出当前设置的时间:"+d);
虽然这个程序是没有错的,但是为了代码能跑通友好性,还是得处理一波。解决方案:
编译得到与之相关的异常处理类:ParseException,然后利用try,catch作显式处理:
try{
String time="2021-11-07";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM--dd");
Date d=sdf.parse(time);
System.out.println("输出当前设置的时间:"+d);
}catch (ParseException e){
System.out.println(e.getMessage());
}
原理说明:首先是执行try函数体部分,如果代码出错了,会抛出一个ParseException异常(具体抛出的异常类型可以通过编译阶段给的提示来获取)。接下来catch函数会接收到ParseException这个异常对象,通过异常对象的getMessage方法可以获取到对应的错误信息,并且代码不会终止执行。
异常常用的处理函数说明:
getMessage();//直接获取错误信息 toString();//将错误信息转化成字符串的形式输出;异常类+getMessage()数据 printStackTrace();//附带错误的位置
另外还可以根据idea提示改写成如下形式:
public static void main(String[] args) throws ParseException {
String time="2021-07";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM--dd");
Date d=sdf.parse(time);
System.out.println("输出当前设置的时间:"+d);
}
//用来跳过编译阶段,但是如果这里真的格式出错的话,该报错的还是会报错,不是很友好
自定义异常函数
public class myException extends Exception{//继承Exception类
myException(String message){
super(message);//这里通过super调用父类的构造函数,父类继续上传,最终调用Throwable的构造函数
System.out.println("自定义异常函数");
}
}
//TestScore类,提供分数校验函数
public class TestScore {
public void isValid (int score) throws myException{//表示这个方法存在异常抛出
//示意调用时加上try catch函数体
if(score <0||score>100){
throw new myException("分数应该在0-100的范围内");//调用自定义异常函数的构造函数
}else{
System.out.println("当前输入的分数正常");
}
}
}
//调用类main方法位置
public static void main(String[] args) {
System.out.println("请输入当前的分数:");
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
TestScore test= new TestScore();//实例化类并调用方法
try {
test.isValid(score);
} catch (myException e) {
e.printStackTrace();
}
}



