java基础知识学习笔记2

    技术2022-05-20  33

        1.面向对象的三大特点:

    (1)封装;a.将属性和方法放在独立的类中,使之成为独立的代码单元;

    b.通过权限修饰符(private、public、protected等)实现对类内部信息的隐藏或公开,提供尽量少的方法访问或修改类内部的信息;

    (2)继承;子类extends父类,将拥有父类的除private修饰方法和属性(同一包中);java只支持单继承,即一个子类只有一个父类;

    (3)多态;包括继承、接口、重载等等‘

        2.方法重载overloaded和覆盖overriden;

    overloaded:(1)重载时只能通过不同的参数完成,如不同的参数类型,不同的参数个数,不同的参数顺序;

    (2)不能通过访问权限、返回类型、抛出的异常进行重载;

    (3)方法的异常类型和数目不会对重载造成影响;

    (4)不能在子类对父类中的private方法重载。

    overridden:(1) 子类的方法名、参数个数、参数类型必须和父类中所覆盖的方法完全相同;

    (2) 子类的方法返回类型必须和所覆盖的方法相同;

    (3) 子类方法不能缩小所覆盖方法的访问权限;

    (4) 子类方法不能抛出比所覆盖方法更多的异常;

    3.this和super;

    this:是指当前对象, 用法: (1)调用本类中的属性,也可以作为参数传递,eg.:this.xxx。

    (2)调用本类中的其他方法,如this(a,b);

    (3)调用本类中的其他构造方法,调用时要放在构造方法的首行。

    super:是指父类对象;用法:(1)调用父类的属性和方法,super.xxx/super.ff();

    (2)调用父类的构造方法,只能放在当前构造方法的首行;

        4.final和static:

    final:(1)修饰变量则改变量为常量。final MAC=100;

    (2)修饰方法则该方法不能被重写,修饰类则该类不能被继承;

    static:(1)修饰变量则改变量为静态变量,即此类的实例共享此变量,它不为任何实例所有,只分配一次内存地址,调用“类名.变量”;

    (2)修饰方法则该方法不需要实例对象就可调用,调用“类名.方法”。

    (3)一般普通类不允许声明为静态的,只有内部类才可以,此时这个内部类作为一个普通类来使用,而不需实例一个外部类。

    (4)static block:形式static{...},静态代码块在类被加载时就执行,且只被执行一次,可用来类属性的初始化;

        5.finalize()方法和Ststem.gc()方法:

    finalize():在从堆中永久删除对象之前,垃圾回收器调用该对象的Finalize方法。注意,无法确切地保证垃圾回收器何时调用该方法,

    也无法保证调用不同对象的方法的顺序。

    System.gc():垃圾回收机制。

        6.单态设计模式:保证在整个系统中只存在某个类的一个实例对象。类的构造方法必须声明为private,即防止外部new新的实例对象;提供一个返回唯一实例对象的方法getInstance();

    e.g.:public class  Singleton{

                  private static final Singleton s = new Singleton();

                  private Singleton(){}

                  public Singleton getIntance(){

                        return s;

                  }

            }

         7.内部类InnerClass:成员内部类、局部内部类、静态内部类和匿名内部类。

    (1)成员内部类;作为外部类的一个成员存在,与外部类的属性、方法并列,成员内部类中不能定义静态变量,但可以访问外部类的所有成员。访问外部类中与内部类同名的实例变量可用"外部类名.this.变量名"。

    (2)局部内部类: 即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。

    局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。

    (3)静态内部类: 静态内部类定义在类中,任何方法外,用static定义,成为了普通类。

    (4)匿名内部类 :一种特殊的局部内部类,只是为了获得一个对象实例,不需要知道其实际类型。

    8.抽象类和接口

    (1)抽象类:由关键字abstract修饰的类,包含abstract修饰的方法,即含有方法定义没有具体实现方法的类,也可以包含实现的方法;

    继承抽象类的子类必须实现父类的抽象方法;

    public abstract class Ex{

    abstract void ff();

    void ff1();

    }

    (2)接口interface:一系列方法定义的集合,它不提供实现接口的具体代码,只提供一系列方法的定义,它所包含的方法都是public

    abstract修饰的方法(可省略不写);接口中定义的变量是final static修饰的;接口没有构造方法;类与接口之间的代码复用关系叫实现,

    一个类可以实现多个接口。

    interface Runnable{

    void run();

    class Fish implements Runnable{

    public void run()

    { System.out.println("The fish is swimming!");}

    }

    class Bird{

    public void run implements Runnable()

    { System.out.println("The bird is flying!");}

    }

    接口回调技术:

    Runnable r1=new Fish();

    ri.run();//接口回调

    接口编程的好处:尽量降低系统的耦合度;将标准的制定者和实现者分离;接口尽量简单、单一;

    9.线程:进程在执行过程中的一条执行线索;

    创建线程的两种方法:(1)继承Thread类;class T extends Thread{} new T().start();

    (2)实现Rnnable,调用Thread类的构造方法;

    class T implements Runn{public void run(){...}} new Thread(new T()).start();

    实现线程同步的两种方法:

    (1)Synchronized代码块;

    class A{}

    class Adder(){ A a;synchronied(a){...}}

    class Getter(){A a;synchronied(a){...}}

    (2)Synchronized类;

    class A { public synchronized void add(){}  public synchronized void get(){}}

    class Adder implements Runnable{ private A a; public Adder(A a){this.a=a;}public void run(){q.add()}}//添加数据

    class Getter implements Runnable{ private A a; public Getter(A a){this.a=a;}public void run(){q.get()}}//读取数据

    public class Test{public static void main(){A a=new A();}new Thread(new Adder(a)).start() ;

    new Thread(new Getter(a)).start() ;

    }

    10.异常Exception"程序在运行的时候肯能出现的非致命性错误,程序提供了处理这些错误的方法;

    try{}cath(Exception e){}finally{};try部分放置可能出现异常的语句,cath负责捕获异常并作出相应的处理,finally部分是否抛出异

    常都会执行;

    throw:手动地抛出异常对象;throws声明方法可能回避的异常,即抛出异常后,必须处理,如果不想处理,就通过throws把异常往上传

    递给上层处理;


    最新回复(0)