java知识点2

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

 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,643评论 0 11
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,373评论 0 4
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,782评论 0 10
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,220评论 0 2