java基础知识学习笔记2

来源:互联网 发布:办公椅三视图带数据 编辑:程序博客网 时间:2024/05/18 21:43

    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把异常往上传

递给上层处理;