Java菜鸟学习日记4

流程分支
if/else:基于boolean值的双分支
switch/case:基于数字(整数、char、byte、枚举)、字符串的多分支
switch/case/default
switch (key) {
case value:
break;

default:
break;
}
方法(method)
方法就是一个子程序。Java中方法的命名规范是驼峰命名法
int add(int a,int b){
int result = a+b;
return result;
float add(float a,float b){
int result = a+b;
return result;
方法也是有类型的
  1. 对于方法的使用者来说,返回值就是方法的类型
  2. 对于重载(Overload)来说,方法的签名就是其类型
  • 方法的签名:方法的名字+参数类型(多个,顺序严格的)
方法的返回值类型不属于签名的一部分
  • 签名不同才能重载
  1. 对于Java8中的拉姆达表达式来说,方法的类型包括
返回值类型->(参数类型<多个,顺序严格>)
方法返回值有一个特殊类型 void
  • 没有返回值,也就是方法中没有return语句
方法的参数传递时有2钟传值形式,实际是由参数的类型的性质决定的。
  • 基本类型:按值传递,把值复制到方法中。
  • 引用类型:只是传递对象的引用,如果在方法中改变了对象(内部属性),就会影响这个对象。
方法(包括面向对象)都不是必须的!方法和面向对象都是给程序设计人员使用的。所以写代码时,如果要定义方法,就要站在设计师的高度去完成方法的设计。
  • 设计的必要性:设计是有必要的(有利于提升质量、可维护性、效率、重用),但是设计是无止境的,适可而止。
  • 评价设计优劣的标准:简化、不要重复(消除重复代码)。
设计师要考虑最重要的事:起名字!
  • 项目名——
  • 包名——
  • 类名——
  • 方法名——
  • 参数名——
提取方法
快捷键提取方法:alt+shift+m
如果一个方法代码太多,职责太多,则表示需要对这个方法进行重构(Rafactor)。通常会使用提取方法的功能将职责进行分散。IDE(eclipse)对此提供非常好的支持。
举例:单位转换程序,所有的代码都可以写在main方法中。但是将调度职责和具体的转换职责进行拆分,将会使程序结构更加清晰。整个程序也会更加简单。
class UnitClac{

static void main(String[] args){
//进行调度转换
}

static void c2f(Scanner scanner){
//将摄氏度转换为华氏度
}

static void f2c(Scanner scanner){
//将会适度转换为摄氏度
}
任何应用都由应用 交互逻辑业务逻辑两部分构成
交互逻辑可以随意改变,而且经常会随技术和流行趋势变化
业务逻辑相对稳定
交互逻辑通常围绕UI展开。
业务逻辑通常围绕数据展开。
集体来说就是 收集、存储、分析、展示数据。
static(静态的)
static方法没有充分体现面向对象的特征。
对于static方法来说,类只是一个容器,static方法与对象(实例)没有直接关系。
程序调试
通过调试可以观察程序的执行过程和内部数据。
调试是一个非常强大的能力(断点和单步执行是由CPU和JVM联合支持的)
加断点:让程序停留在断点的位置
单步执行:F5/F6
F5:进入方法
F6:越过方法
调用栈
栈是一个只有一个口的容器,先进入栈的会落到栈低,弹出时最后弹出。最后进入栈的在栈顶,先弹出。
方法调用时,需要在内存中开辟一块存储空间作为线程的栈空间(每个线程都有自己的栈)调用方法时,会在栈中压入一个栈帧,用来存储这个方法的参数和局部变量。方法返回时,栈帧就会弹出,反方的参数和局部变量就会清楚。
方法调用时,调用栈不断处于涨落之中,如果调用的层级过深,调用栈可能会溢出。
因为代码执行的速度很快,所以栈帧的生存时间很短,瞬间生灭,所以局部变量无法被外部使用。
异常处理与调用栈(try/catch/finally)
  • 程序执行时,遇到错误(调用栈中的错误)就会停止执行,如果错误数据不能清除掉,程序就无法恢复,最终崩溃。而Java等现代编程语言普遍提供了清理错误数据的机制——异常处理
  • 早期的C语言等没有异常处理机制
  • 在Java中有一类异常很特别,它们叫做受查异常
受查异常必须传递出去(throws)或者处理掉(try/catch)
try{

}catch(someTypeException ex){
//清理
//异常对象使用
}
//从这里继续执行
当代码执行到try时,会 建立一个安全点,一在try中发生错误,JVM就会收集错误信息(错误的原因、错误的位置、当前调用栈的结构等)。然后利用这些信息创建一个Exceptiion对象(创建的Exception取决于错误原因),然后抛出(throws)这个异常对象——catch能够捕捉这个异常对象
  • 异常对象的传播
当异常被throw之后,JVM会沿着调用栈从上往下逐帧查找try建立安全点,直到找到一个符合条件的catch或者到达栈低。 (catch负责识别异常类型,如果不能捕捉,try无法建立安全点)
  • 异常的的catch
catch是一个匹配的过程,只有类型匹配成功才会接受(捕获),否则继续沿着调用栈查找。
当异常被处理后,上面的栈帧就会被清除。
如果在错误之前打开了系统资源,则该资源就有可能没有正确地关闭,所以try/catch后面可以写finally{}
finally一定会被调用(无论catch是否能够捕捉),可以用来关闭资源。
  • 异常对象中包含的信息可以通过异常对象提供的方法获取到
    • getMessage():获取具体的异常信息,异常名称
    • getStackTrace():获取详细的异常信息,
    • printStackTrace():可以把异常信息打印到控制台或指定的输出流中(保存成文件等)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值