java笔记

来源:互联网 发布:java中方法重载的作用 编辑:程序博客网 时间:2024/06/10 07:24


1.构造器


构造器负责类中成员变量(域)的初始化


2.静态变量 该类中所有对象可共享的变量 属于整个类所有 推荐用类名访问


3.静态方法 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员


  如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量


  在 普通成员方法 中,则可以 直接 访问 同类的非静态变量和静态变量


静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。


4 属性常设置为private, 方法常设置为 public


5 this关键字 
this关键字代表当前对象

this.属性 操作当前对象的属性


this.方法 调用当前对象的方法


6 内部类 不允许 同一个包中 的其他类 访问该类


内部类的方法 可以 直接 访问外部类 所有数据,包括 私有的数据


内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便


匿名内部类 只要 一个类是抽象 的或是 一个接口 ,那么其子类中的方法都可以使用匿名内部类来实现


最常用的情况就是在 多线程 的实现上,因为要实现多线程 必须 继承Thread类 或是 继承Runnable接口


7.成员内部类 定义了成员内部类后,必须使用外部类对象来创建内部类对象 内部类 对象名 = 外部类对象.new 内部类( );


8.静态内部类 static 修饰的内部类 :


静态内部类 不能直接访问 外部类的 非静态 成员,但可以通过“  new 外部类().成员 ”的方式访问 


如果 外部类的静态成员 与 内部类的成员名称 相同,可通过“类名.静态成员”访问外部类的静态成员;

如果外部类的静态成员与内部类的成员名称 不相同,则可通过“成员名”直接调用外部类的静态成员


创建静态内部类的对象时,不需要 外部类的对象,可以直接创建“ 内部类 对象名= new 内部类()”;


9.object 类: 


protected Object clone()创建并返回此对象的一个副本。

boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。


Class<?> getClass()返回此 Object 的运行时类。


int hashCode()返回该对象的哈希码值。


void notify()唤醒在此对象监视器上等待的单个线程。


void notifyAll()唤醒在此对象监视器上等待的所有线程。


String toString()返回该对象的字符串表示。


void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。


void wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,

导致当前线程等待。


void wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,


或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。


10. 继承:


子类不可继承父类的private


子类属性与父类属性无关


子类中构造方法与父类一致  而且子类必须有构造方法


11.Java中 “==” 比较的是 地址值 是否相同


12.类对象可用于判断两个类的类型是否相同


13.抽象类  是对类的抽象


至少含有一个抽象方法


不能被实例化


继承抽象 类 的子类 必须实现其所有 抽象方法 才能被实例化 否则该子类还是抽象类




14  同一个文件中只能有一个public class?


15  接口是 类 的框架


16  类的前面必须有关键字 class


17. 多态   父类不可调用子类所独有的方法  但可以调用子类中 重写父类的方法


18.String:是对象不是原始类型.


           为不可变对象,一旦被创建,就不能修改它的值.


           对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.


           String 是final类,即不能被继承.


 


19StringBuffer:
           是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象


           它只能通过构造函数来建立,


          StringBuffer sb = new StringBuffer();


          对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.通过它的append方法向其赋值.


          sb.append("hello");


20. string,stringbuffer,及stringbuild 的区别

(1.可变与不可变


            String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。


          private final char value[];


    StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,


如下就是,可知这两种对象都是可变的。
  


(2.是否多线程安全


   String中的对象是不可变的,也就可以理解为常量,显然线程安全。


   AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,


  如expandCapacity、append、insert、indexOf等公共方法。


  StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是 线程安全 的。


   StringBuilder并没有对方法进行加同步锁,所以是 非线程安全 的。


(3.StringBuilder与StringBuffer共同点


   StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。


   抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,


 不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。


   StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,


 如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。


   最后,如果程序 不是 多线程 的,那么使用StringBuilder效率高于StringBuffer。


21.多线程:


由于两个线程同时运行,相互不会干扰,因此输出顺序不定。


22.字符串数组


字符串数组 String [] strArray = new String [20];


      不过推荐用ArrayList<String> strArray = new ArrayList<String> (); 比较灵活 




23. 多态: 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。


(发送消息就是函数调用)


在 执行期间 判断所引用 对象的实际类型,根据其 实际的类型 调用 其相应的方法


多态是超类通过方法签名,向 子类 提供了一个 共同接口,由 子类 来完善 或者 覆盖 它而实现的

原创粉丝点击