美文网首页
java知识点2

java知识点2

作者: 繁星追逐 | 来源:发表于2019-07-28 11:55 被阅读0次

    JVM (java Virtual Machine)起到了主要作用。JVM是运行在平台之上的程序,它能够虚拟出一台目标机,所有字节码就是在虚拟出的目标机上运行。

    Java虚拟机的主要任务是装载class文件并且解释执行其中的字节码

    数组的定义和创建

    数组名= new  数据元素类型[ 元素个数]

     int  a[] = new int[5];

    在堆内存中开辟空间,只能通过内存分配操作符号new,凡是出现关键字new的地方必定分配了一个堆内存。

    垃圾回收机制

    Java的垃圾回收机制是自动的,它保证程序健壮的主要手段,避免了由于程序员忘记回收内存而引起的内存泄漏,同时也避免了回收内存带来的代码繁琐。

    垃圾回收机制实际上是JVM内部运行的一个优先级比较低的后台线程,这种多线程的模式使得java 具有更好的性能,完全不用程序员参与。

    垃圾回收机制仅仅作用于堆内存,于栈内存无关。

    对于程序员来说,对象何时变成垃圾呢?

    对象的引用被赋值为null;Person p = new Person( );   p= null;

    一次性使用的匿名对象;       new Person( ).sayHello();

    超出生命周期的;如:

         for( int I = 0; i< 100; i++){

                      Personp = new Person( );

             }      

    这里,变量p 被实例化100次,每结束一次循环,变量p就超出生命周期,对象变为垃圾。

    this关键字

    代表对象自身的引用

    一个引用

    指向调用该方法的当前对象

    通常在类的方法定义中使用

    用this关键字的情况

    方法中的变量与成员变量重名

    在一个构造器中,调用其它重载的构造器

    返回当前对象的引用

    super和this关键字

    super()

    作用:调用父类的构造器

    只能出现在子类的构造器中,且必须是第一行

    super()中的参数,决定了调用父类哪个构造器

    如果子类构造器中没有出现super,那么编译器会默认加上super(),即调用父类的空构造器,如果父类没有空构造器,编译器提示错误。

    this()

    作用:调用本类的构造器

    只能写在构造器的第一行

    在同一个构造器中super()和this()不能同时出现

    如调用的是父类中无参的构造器,则可以不写super( )

    如果子类中调用了父类无参的构造器,而父类中没有无参构造器则系统编译出错

    单例模式(singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点

    单例模式要点:

    某个类只能有一个实例

    它必须自行创建这个示例

    必须自行向整个系统提供这个实例

     

    final关键字

    final可以修饰的元素:

    类:不能被继承

    变量(属性和局部变量):不能被重新赋值

    在声明时赋值,或在构造器中赋值

    系统不会对final属性默认的赋初始值

    方法:不能在子类中被覆盖,即不能修改。

    抽象类的规则

    注意:

    抽象类不能被实例化;

    其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;

    抽象方法不能为static;

    在下列情况下,一个类必须声明为抽象类:

    当一个类的一个或多个方法是抽象方法时;

    当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;

    当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

    接口中只包含常量和抽象方法,而没有变量和方法的实现

    接口对类来说是一套规范,是一套行为协议;

    接口不是一个类,不能实例化

    针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。

    接口与抽象类的对比

    接口不能含有任何非抽象方法,而抽象类可以。

    类可以实现多个接口,但只能有一个父类。

    接口和接口之间可以多继承 

         如:public interface A extends B,C

                B,C也是接口.

    抽象类可以理解为抽象方法和非抽象方法的混合体,而接口中的方法完全是抽象方法,是一套纯粹的规范。一般来说,有关系的类才能继承同一个抽象类,而无关的类不可能有同一个抽象父类,但是无关的类可以实现同一个接口。

    内部类特性

    内部类就是定义在另一个类内部的类。

    内部类对于同一包中的其它类来说,内部类能够隐藏起来。

    注意

    内部类可以访问其外部类中所有的属性和方法

    无需创建外部类的对象,即可从内部类访问外部类的变量和方法。

    必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。

    如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。

    不能定义static变量

    Object 类的直接子类Throwable描述了所有被虚拟机抛出的非正常状况。一般情况下很少用Throwable,而是使用它的两个子类Error、Exception。

    Error类特指应用程序在运行期间发生的严重错误。如:虚拟机内存用尽、堆栈溢出等等。一般情况下这种错误都是灾难性的,所以没有必要使用异常处理机制处理Error。

    Exception类有几十个子类,描述了不同类型的异常,其中:

    以RuntimeException为代表的一些类,称为非检查性异常(unchecked Exception),

    以IOException为代表的一些类为检查性异常(checked Exception)。所谓的检查和非检查是指编译器在编译时是否检查。如果代码中存在检查性异常,必须进行异常处理,否则编译时不能通过;而非检查性异常编译时不进行检查,到运行时才会显现。

    String的创建:有两种方式:

    静态方式(常用)。像是给变量直接赋值一样来使用。如:String s1 = “abc”; String s2 = “abc”;

    动态方式。动态的内存分配,使用new运算符。如:String s3= new String(“abc”); String s4= new String(“abc”);

    StringBuilder类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

    StringBuffer和StringBuilder都是长度可变的字符串。

    两者的操作基本相同。

    两者的主要区别在于

    StringBuffer类是线程安全的;

    StringBuilder类是线程不安全的。

    StringBuffer在JDK1.0中就有,而StringBuilder是

    在JDK5.0后才出现的。

    StringBuilder的一些方法实现要比StringBuffer快

    些。

    Calendar c = Calendar.getInstance();

    c.get(Calendar.YEAR);

    SimpleDateFormat sdf = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    将日期格式成指定的字符串

    sdf.format(new Date());

    将格式化的字符串转换成日期对象

    sdf.parse(“2011-07-16”);

    HashMap与TreeMap的比较

    HashMap基于哈希表实现。

       TreeMap基于树实现。

    HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。

       TreeMap没有调优选项,因为该树总处于平衡状态

    HashMap性能优于TreeMap。

    HashMap与Hashtable的比较

    Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

    Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。

    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

    如何选择集合类

    Set内存放的元素不允许重复,List存放的元素有一定的顺序。

    Map的应用主要在利用键/值对进行快速查询。

    ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好。

    HashSet和TreeSet的区别在于集合内元素是否排序。

    进程/线程区别

    每个进程都有独立的代码和数据空间,进程的切换

    会有很大的开销

     同一类线程共享代码和数据空间,每个线程有独立

    运行的栈和程序计数器,线程切换的开销小

    多进程:在操作系统中能同时运行多个任务(程序)

    多线程:在同一应用程序中有多个顺序流同时执行

    多线程的实现

    (1)  创建线程类

    继承Thread类     或

    实现Runnable接口

    (2)  通过Thread类构造器来创建线程对象

     Thread( )

     Thread(Runnable target)

    (3)  通过start()方法激活线程对象

    Java线程的优先级用1~10的整数来表示,越小则优先级越低

    当一个线程运行到需要同步的语句后,CPU不去执行其他线程中的、可能影响当前线程中的下一句代码的执行结果的代码块,必须等到下一句执行完后才能去执行其他线程中的相关代码块,这就是线程同步

    实现同步的两种方式

    synchronized方法

    synchronized void methodA() {  }

    synchronized语句

    synchronized (Object) {

        //要同步的语句

     }

    网络编程

     

     

     

     

     

    支持序列化的接口和类

    Serializable接口、Externalizable接口

    ObjectInputStream

    ObjectOutputStream

    只有一个实现Serializable接口的对象可以被序列化工具存储和恢复

    Serializable接口没有定义任何属性或方法。它只用来表示一个类可以被序列化。如果一个类可以序列化,它的所有子类都可以序列化

     

    相关文章

      网友评论

          本文标题:java知识点2

          本文链接:https://www.haomeiwen.com/subject/lmvurctx.html