• java 新手入门课程03


    2017.7.6  java 课堂笔记

    1.关于分支;

    if/else 是基于boolean 值的双分支

    Switch  基于数字(包括整数 char byte  枚举, 字符串)类型的多分支

     方法 method

     方法就是一个子程序Java中方法的命名规范 是驼峰命名法

    Int add(int a,int b){

       Int result =a+b;

       return result;

    }

    float add(int a,int b){

    }

    float addfloat a,float b {

       float result=a+b

       return result

    }

     

    方法也是有类型的

      1. 对于方法的使用者来说  返回值就是方法的类型

      2.对于重载来说,方法的签名就是其类型

         方法的签名; 方法的名字+参数类型 (多个  顺序严格)

          方法的返回值类型不属于签名的一部分

         签名不同才能重载!

       3.对于Java8中的拉姆达表达式来说 方法的类型包括返回值类型(参数类型 (多个  顺序严格的))

    方法的返回值有一个特殊类型 void   没有返回值  也就是方法中没有return语句

    方法的参数传递时有两种传值形式   实际是有参数的类型的性质决定的

      基本类型: 按值传递  把值复制到方法中

      引用类型只是传递了对象的引用  如果方法中的对象发生了改变(内部属性)  就会影响这个对象

    方法(包括面向对象) 都不是必须的!方法和mianxiangduixiang都是给程序设计人员使用的 所以要写代码 如果要定义方法 就要站在设计师的高度酒完成方法的设计。

    设计必要性: 设计是有必要的  (有利于提升质量  可维护性 效率 重用)但是设计是无止境的   适可而止。

    评价设计的优劣标准; 1. 简化  2.不要重复(消除重复代码)

    提取方法:

        日过一个方法 代码太多  职责太多则需要表示需要对这个方法进行重构 Rafactor) 通常会使用  提取方法的功能  对职责进行分散

      IDE 对此提供了  非常好的支持

      举例 单位转换程序  所有的代码都可以写在main方法中 但是将调度职责和具体的转换职责进行拆分  将会是程序结构更加清晰  整个程序也会更加简单

    Class UnitClac{

          Static void main (String[] args){

                   //进行转换调度

    }

         Static void c2f(Scanner scanner){

             // 将摄氏度转换为华氏度

    }

         Static void f2c(Scanner scanner){

             // 将华氏度转换为摄氏度

    }

    }

     2.任何应用程都由应用交互逻辑业务逻辑两部分构成

       交互逻辑可以随意改变 而且经常会随技术和流行趋势变化

       业务逻辑相对稳定  

       交互逻辑通常围绕UI展开

       业务逻辑通常围绕数据展开

            具体来说 收集数据  存储数据 分析数据  展示数据

    Static 方法没有充分体现面向对象的特征

    对于static 方法来说 类只是一个盒子(容器) static 方法与对象关系(实例)不大

    程序调试   通过调试可以观察程序内部数据和人执行过程

    调试是一个非常强打的能力   断电和单步执行是由CPUJVM 联合支持

    通过虫子图标可以进入调试模式  如果没有看到调试透视图  可以在右上角进行透视图的切换

     加断点  让程序停留在短点的位置

    单步执行 F5 /F6

        F5 向上执行一句

    F6  向下执行一句

       调用栈  栈是只有一个口的容器  先进入的回落到栈底  弹出额时候最后弹出

    最后进入的在栈顶  弹出时先弹出

    方法调用时  需要在内存开辟一快存储空间  作为线程栈空间

    每个线程都有自己的栈

    调用方法时 会在栈中压入一个栈帧 用来存储这个方法的参数和局部变量

    方法调用时 栈帧就会弹出 方法的参数和局部变量就会清除

    方法调用时 调用栈不断处于涨落之中

     如果调用的层级过深 调用栈就会溢出

    因为代码执行的数据很快  所以栈帧的生存时间很短  瞬间生灭  

     所以局部变量无法被外部所使用

    作业:

    static void main(){

       double a=3 ;

       double  b=5;

       double c=calcarc (3,5);

    }

    Static double calacar (double x,double y){

    double m=pow(x);

    double n=pow(y);

    double o =m+n;

    return sqrt(o);

    }

     3.异常处理

    程序执行时,遇到错误(调用栈中的错误)就会停止执行

     如果错误数据不能清除掉  程序就无法恢复  最终崩溃  Java等现代编程语言  普遍提供了清理错误数据的机制

     异常处理

      早期的C语言  等没有异常处理机制

    Java中有一类异常很特别  它们叫做受查异常  

    受查异常  必须传递出去(throws)   或者 处理掉(try/catch)不能不管

    try{

    }

    当代吗执行到try时会建立一个安全点 一旦在try中发生错误 JVM就会检查并收集错误信息(错误的原因 错误的位置  当前调用栈的结构等) 然后利用这些信息  创建一个 excption 对象  (类型取决于错误原因)

    然后抛出(throw)这个异常对象

    异常对象的传播  

    当异常被抛出之后 JVM会沿着调用栈从上到下逐帧查找try 建立的安全点 直到找到一个符合条件的catch或者到达栈底

    Catch(someTypeException ex){

    // 清理

    // 异常对象的使用

    }

       //从这里开始继续执行

    异常的catch

         catch是一个匹配的过程  只有类型匹配成功 才会接受(捕获)

    否则继续沿着调用栈查找

     当异常被处理 上面的栈帧就会被清除

    如果在错误之前打开了 一个系统资源 则该资源就有可能没有正确的关闭

    所以try/catch 之后可以写finally{    }

     finally一定会被调用  用来关闭资源

    trycatchfinally语句块的执行顺序:

    1)try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句;

    2)try捕获到异常,catch语句块里没有处理此异常的情况:当try语句块里的某条语句出现异常时,而没有处理此异常的catch语句块时,此异常将会抛给JVM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行;

    3)try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配,找到与之对应的处理程序,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句;

    异常对象中 包含的信息可以通过异常对象提供的方法获取到

    getMessage()

    getStackTrace()

    printStackTrace 可以把异常信息打印到控制台或指定的输出流当中(保存成文件)

  • 相关阅读:
    地税某数据库异常重启和重启后数据库运行缓慢问题的解决过程
    Oracle 索引 详解
    oracle数据库优化基本概念
    oracle物理读和逻辑读
    SQL 优化之该走索引却不走索引的分析(二)
    数据仓库中的分区修剪
    查询低效率的sql语句
    oracle优化的几个简单步骤
    VBS类似于ceil的函数
    ruby符号的应用
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860275.html
Copyright © 2020-2023  润新知