传智播客自学笔记第9天(待编辑)

来源:互联网 发布:数据安全存储方案 编辑:程序博客网 时间:2024/06/05 20:48

一、访问修饰符

    访问修饰符:public   protected   default  private

                          public        protected       default      private
             同一个类中     ok             ok             ok           ok
             同一个包中     ok             ok             ok
             子父类         ok             ok 
             不同包中      
 ok
二、静态(static)

   1、静态修饰的内容有成员变量和函数。当对象中出现共享数据时,该数据被静态所修饰。

       对象中的特有数据要定义成非静态存在于堆内存中。

   2、 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。

      类名.静态成员。

   3、 static特点:
        1,随着类的加载而加载。 
            也就说:静态会随着类的消失而消失。说明它的生命周期最长。

        2,优先于的对象存在
            静态是先存在。对象是后存在的。

        3,被所有对象所共享
        4,可以直接被类名所调用。

   4、 实例变量和类变量(静态变量)的区别:
        1,存放位置。
           类变量随着类的加载而存在于方法区中。
           实例变量随着对象的建立而存在于堆内存中。
        2,生命周期:
           类变量生命周期最长,随着类的消失而消失。
           实例变量生命周期随着对象的消失而消失。

    5、静态使用注意事项:
       1,静态方法只能访问静态成员。
          非静态方法既可以访问静态也可以访问非静态。
       2,静态方法中不可以定义this,super关键字。
          因为静态优先于对象存在。所以静态方法中不可以出现this。
       3,主函数是静态的。
    6、静态有利有弊
       利处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。
             可以直接被类名调用。
       弊端:生命周期过长。
             访问出现局限性。(静态虽好,只能访问静态。)

    7、静态代码块。
           格式:
             static{
                   静态代码块中的执行语句。
             }

        特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化的。

三、内部类

       当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事务在使用外部事物的内容。

    1、内部类的访问规则:
        1,内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内

           部类中持有了一个外部类的引用,格式 外部类名.this
        2,外部类要访问内部类,必须建立内部类对象。

    2、访问格式:
        1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。

          可以直接建立内部类对象。
         格式
             外部类名.内部类名  变量名 = 外部类对象.内部类对象;
             Outer.Inner in = new Outer().new Inner();

        2,当内部类在成员位置上,就可以被成员修饰符所修饰。
          比如,private:将内部类在外部类中进行封装。
                static:内部类就具备static的特性。
          当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。

          在外部其他类中,如何直接访问static内部类的非静态成员呢?
              new Outer.Inner().function();

          在外部其他类中,如何直接访问static内部类的静态成员呢?
              uter.Inner.function();

          注意:当内部类中定义了静态成员,该内部类必须是static的。
              当外部类中的静态方法访问内部类时,内部类也必须是static的。

        当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事务的内容。

        局部内部类不能定义静态成员非静态,没对象不运行。

     3、内部类定义在局部时,
          1,不可以被成员修饰符修饰
          2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
             但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

     4、匿名内部类:
          1,匿名内部类其实就是内部类的简写格式。
          2,定义匿名内部类的前提:
              内部类必须是继承一个类或者实现接口。
          3,匿名内部类的格式:  new 父类或者接口(){定义子类的内容}
          4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。
          5,匿名内部类中定义的方法最好不要超过3个。

黑马程序员_异常_学习笔记  

---------------------- android培训java培训、期待与您交流! ----------------------


  异常:就是程序在运行时出现不正常情况。
  异常由来:问题也是现实生活中具体的事物,也可以通过java类的形式
  描述,封装成对象。 其实就是java对不正常情况描述后的对象
  体现。

对于问题的划分:一种是严重的问题,一种是非严重的问题

对于严重的,java通过Error类进行描述。
 对于Error,一般不编写针对性的代码对其进行处理。
对于非严重的,java通过Exception类进行描述。
 对于Exception可以使用针对性的处理方式进行处理。

无论Error或者Exception都具有一些共性内容。
比如:不正常情况的信息,引发原因等。
抽取出的父类:Throwable
    ---Error
    ---Exception

1,异常的处理:

java提供了特有的语句(可不全写)进行处理
try
{
 需要被检测的代码
}

catch(异常类 变量)
{
 处理异常的代码;(处理方式)
}

finally
{
 一定会执行的语句;
}

2,对捕获到的异常对象进行常见方法操作。
 String getMessage();
------------------------------------------------------
throws Exception:在功能上通过throws的关键字声明了该功能有可能
     出现问题。
------------------------------------------------
对多异常的处理。
1,声明异常时,建议声明更为具体的异常,这样可以处理得更具体。

2,对方声明几具异常,就对应有几个catch块。
 如果多个catch块中的异常出现继承关系,父类异常catch块放在最
 下面。不要定义多于的catch块。

在进行catch处理时,catch中一定要定义具体处理方式。
不要简单定义一句 e.printStackTrace(),
也不要简单的就书写一条输出语句。

PS:java为了增强阅读性,把父类名作为子类后缀名
函数中只要有异常发生,则程序立即结束,所以异常一次只能处理一个
    
因为项目中会出现特有的问题,
而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的
问题进行自定义的异常封装。
---------------------------------
自定义异常。
需求:在本程序中,对于除数是负,也视为是错误的是无法进行运算的。
那么,就需要对这个问题进行自定义描述。

当在函数内部出现了throw抛出异常对象,就必须要给对应的处理动作。
要么在内部try catch处理
要么在函数上声明让调用者处理。

一般情况下,函数内出现异常,函数上需要声明。

发现打印的结果中只有异常的名称,却没有异常的信息。是因为自定义
异常并未定义信息。

@@@@@@@@@@@@@@@@@@
如何定义异常信息呢?
 因为父类中已经把异常信息的操作都完成了。
 所以子类只要在构造时,将异常信息传递给父类通过super语句
 即可。这样就可以直接通过getMessage方法获取自定义的异常信息。


自定义异常:
必须是自定义类继承Exception.

继承Exception的原因:
 异常体系有一个特点,因为异常类和异常对象都被抛出。
 他们都具备可抛性,这个可抛性是Throwable体系中独有的特点。
 只有这个体系中的类和对象才可以被throws和throw操作。

---------------------------
throw 和 throws 的区别:
  1,throws使用在函数上(函数名后)。
  2,throw使用在函数内(看09ExceptioDemo)。
 
 throw 后跟的是异常对象。
 throws 后面跟的异常类(名),可以跟多个,用逗号隔开。
------------------------------
------------------------------
Exception 中有一个特殊的子类异常RuntimeException 运行时异常。
 如果在函数内容中抛出该异常,函数上可以不用声明,编译一样
 通过。
 如果在函数上声明了该异常,调用都可以不用进行处理,编译
 一样通过。

 之所以不用在函数上声明,是因为不需要让调用者处理。
 当该异常发生,希望程序停止,因为在运行时,出现了无法继续
 运算的情况,希望停止程序上,对代码进行修正。

____________________________________________
自定义异常时,如果该异常发生时,无法再继续进行运算,就让自定义
异常继承RuntimeException


对于异常分两种:
 1,编译时被检测的异常。

 2,编译时不被检测的异常(运行时异常,RuntimeException以及
 其子类)


例子:毕老师用电脑上课

开始思考上课中出现的问题
 比如:电脑蓝屏,电脑冒烟

要对问题进行描述,封装成对象。

当冒烟发生后,出现讲课进度无法继续。
出现了讲师的问题:课时计划无法完成。

PS:throw出现时,下面不能再写语句,因为抛出时,程序就结束

--------------------------------------------------------------

自定义异常练习程序:

class LanPingException extends Exception
{
 LanPingException(String message)
 {
  super(message);
 }
}

class MaoYanException extends Exception
{
 MaoYanException(String message)
 {
  super(message);
 }

}


class NoPlanException extends Exception
{
 NoPlanException(String msg)
 {
  super(msg);
 }
}

//---------------------------------
class Computer
{
 private int state = 3;

 public void run() throws LanPingException,MaoYanException
 {
  if(state==2)
   throw new LanPingException("蓝屏了");
  if(state==3)
   throw new MaoYanException("冒烟了");

  System.out.println("电脑运行");
 }
 public void reset()
 {
  System.out.println("电脑重启");
 }
}
//--------------------------------
class Teacher
{
 private String name;
 private Computer cmpt;

 Teacher(String name)
 {
  this.name = name;
  cmpt = new Computer();
 }

 public void prelect() throws NoPlanException
 {
  try
  {
   cmpt.run();
   
  }
  catch (LanPingException e)
  {//处理
   cmpt.reset();
   
  }
  catch (MaoYanException e)
  {
   test();
   throw new NoPlanException("课时无法继续"+e.getMessage());
   
  }
  System.out.println("讲课");
 }

 public void test()
 {
  System.out.println("练习");
 }
}

//------------------------------------------
class ExceptionTest
{
 public static void main(String[] args)
 {
  Teacher t = new Teacher("毕老师");
  try
  {
   t.prelect();
  }
  catch (NoPlanException e)
  {
   System.out.println(e.toString());
   System.out.println("换老师,或者放假!");
  }
  
 }
}

 

---------------------- android培训java培训、期待与您交流! ----------------------



原创粉丝点击