Java基础第三篇小白专属

20:魔法值

编程中 应该消除魔法值 【代码中出现的常量数据】

因为数据本身是不具有语义化的 所以为了提高代码的可读性 我们需要消除魔法值

有的时候魔法值多的时候  我们需要创建一个单独的类去维护这些常量

21:static关键字

修饰静态的 如果不添加则代表非静态的

字段和函数添加static关键字的时候 此时属于类级别,调用的时候使用类名进行调用

修饰字段:

非静态字段 每个对象特有

静态字段 属于类级别   所有当前类对象共有

static 修饰函数 为静态函数

所有的静态函数都可以写成非静态函数,非静态函数调用需要通过对象调用 有的时候使用对象调用浪费内存

22.数组

Java中也是有数组的,但是和js中不同

Java中的数组是定型和定容的

定型:只能存储一种数据类型

定容:容量是固定的

Java中创建数组的格式

数据类型【】名字  =  new  数据类型[容量]

数据类型【】名字  =  new  数据类型【】{初始值,初始值}

数据类型【】名字  =  new  {初始值,初始值}

Arrays:官方写好的数组工具类  Arrays

数组扩容:Java中数组是定容的,一旦超出容量就是会抛出异常:数组越界异常

23.封装:

封装 就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或者功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类 其中数据和函数 都是类的成员

ArrayToo1  工具类封装:里面写的是功能函数,需要使用的时候不需要再写代码只需调用函数

MyArray 面向对象封装:体现了面向对象思想

面向对象思想始于封装

24.异常

public static int getMax(int[] arr){

int max = arr[0]

for (int i = 1;i<arr.length;i++){

if (max <arr[i] ) max = arr[i];

}

return max;

}

在我们封装的功能函数 getMax获取最大值中,其实是有问题的: 我们首先获取了 数组中索引为0的数 据。然后再依次判断后面的数据是否比之前的大。但是 如果我们的数组没有数据 此时就没有最大值一说。 所以我们封装的函数 需要进行安全判断。

此时 返回 return -1 不行 因为有歧义 return null 不行 因为 数据类型不匹配

return    missing return  value 此时只有return 也不行

return   错   此时返回的是字段码 return  错

在我们封装的函数中 有可能出现 因为传入的参数有问题 导致整个函数无法正常执行的情况

所以Java 官方就提供了一套新的语法规则 专门解决函数中参数有问题导致无法正常返回的情况。

1.2,此时我们就是需要通过异常来解决问题

有返回值的函数  一定要有一个可以执行的  return 或者throw

正常返回数据   return

异常提示信息  throw

1.3 执行方,抛出异常

25. 执行方:抛出异常

在函数中 遇到参数或者其他问题导致程序无法执行的时候 我们需要在函数中 进行异常抛出 提示调用这 对数据进行检查

throw 异常对象

throw new RuntimeException (“对不起,请检查参数是否合法”)

RuntimeException 是异常中一个对象 称之为  运行时异常

26.调用方:处理异常A 异常转移

异常转移是默认的方式,它是将当前异常再次转移给当前的调用者,由当前调用者进行处理, 语法规则是  在函数的参数列表后面 添加一个 throws关键字,关键字后面跟上要转移 异常类型

例如:public static void main(String[] args) throws RuntimeException

此时当前函数的调用者需要对异常进行处理了 他依然可以选择 异常转移的方式,此时如果所有的调用者都选择转移的形式处理异常,就会最终转移到 JVM JVM负责处理当前异常,打印异常跟踪栈信息,并且退出

调用方:处理异常B 异常捕获

异常捕获需要借助 try{} catch(异常类型 名字){}

其中try{可能出现异常的代码}catch(异常类型 名字){出现异常之后的解决方案}

代码在执行的时候 是这样执行的 首先执行try中的代码 如果没有异常则拉倒 catch不会执行 如果其中一句代码有问题 此时就会停止执行try中后续代码的执行 并且catch中的内容

catch中如何处理异常、

public static void main(String[] args) {

try {

int[] arr = {};

int max = ArrayTool.getMax(arr);

System.out.println(max);

}catch (RuntimeException e){

// 1 记录日志 部署项目

// 2 打印异常跟踪栈信息

e.printStackTrace();

// 3 回滚数据 等等

}

System.out.println("你好世界"); }

分类捕获异常

catch可以写多个 此时出现异常之后 会一次检查是否当前catch的异常

如果是当前异常则进入catch代码块

此时我们就是可以通过这种手段 分类捕获异常

这个功能应用于不同的异常 实施不同处理方案的场景

如果所有的异常处理的方式都不一样 分类捕获异常的时候需要 父类异常放在后面

27.finally 代码块

try{

可能出现异常的代码

}catch(异常类型 名字)

处理异常的方案

}finally{

关闭资源等操作

}

finally代码块 无论是有没有异常的出现 都会去执行finally代码块中的代码

28.常用类 测试函数

我们之前写的代码 都是通过main运行 来测试功能是否实现,但是一个Java类只能有main 函数 我们当时否是写了删 删了写 这样不利于我们对代码进行保留 并且运行时长等内容都没有 我们开始使用测试函数

第一步创建一个测试类 (注意一定不能叫Test)

public class JavaTest {}

第二步 在测试类中 添加测试函数 (公共无参无返回值的函数)

public class JavaTest  {

public void test01a(){

}}

第三步 在测试函数上面 添加一个@Test 注解

第四步 添加注解的引用

29.String 面试题

1.String 能否被继承? 问什么?

不能被继承  因为是被final 修饰的类不能被继承

2.String是否有length()函数?数组是否有length()函数?

String有length函数 但是 数组没有 数组有length属性

3.==和equals 的区别

==是判断的是引用的地址是否相同

equals是判断的内容是否相同

4.请问一下的代码创建了几个字符串对象

String  s1 =‘’123“

String  s2 =new String(“456”)

第一句代码创建了0个或者1个 当数据常量池中已经存在123的时候 此时就是创建了0个 如果没有就是创建一个

第二句带啊创建了1个或者2个,首先new String 是在堆区创建了一个对象然后再去常量池中是否存在,如果存在就是1个如果不存在 就是两个

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值