Java:知识总结

概述

1991年由sun公司开发的名称为Oak的语言,1994年改名为Java。html

JDK:Java Development Kit,Java的开发和运行环境,Java的开发工具和JRE。java

JRE:Java Runtime Environment,Java程序的运行环境,Java运行的所需的类库和JVM(Java虚拟机)。设计模式

Java经常使用命令:javac  是负责编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译,生成了jvm能够识别的字节码文件,即class文件,也就是java的运行程序。java  负责运行的部分,会启动jvm加载运行时所需的类库,并对class文件进行执行。一个文件要被执行,必需要有一个执行的起始点,这个起始点就是main函数。数组

语法基础

数据类型:基本数据类型(四类八种) 引用数据类型(数组 类 接口)安全

基本数据类型:整数 byte short int long 小数 float double 字符 char 布尔 boolean,所占字节数分别为 1 2 4 8 4 8 2 1数据结构

数据度量单位:比特(位),bit 是计算机晶体管的一种状态(通电与断电)就是0与1,真与假,是计算机最基本的传输单位;字节 Byte 是计算机信息技术用于计量存储容量的一种计量单位,1Byte = 8bit ,1KB = 1024 Byte;字符 一个字符是一个单位的字形、类字形单位或符号的基本信息,UTF-8编码中,一个英文字母占1Byte,一个汉字占3-4Byte。app

Java程序在运行时,须要在内存中分配空间,为了提升效率,就对数据进行了不一样的空间划分,具体分为5种内存空间:jvm

寄存器(程序计数器):保证线程切换后能恢复到原来的执行位置;函数

本地方法区:为虚拟机执行使用到的Native方法服务;工具

栈(虚拟机栈):存储的都是局部变量,方法被调用时,建立栈帧,只要数据运算完成所在的区域结束,该数据就会被释放;

堆:用于存储数组和对象,也就是实体。每一个实体都有内存首地址值,堆内存中的变量都有默认初始化值,由于数据类型不一样,值也不同;

方法区:存储被虚拟机加载的类信息,常量,静态常量,静态方法等。(参考文档http://www.javashuo.com/article/p-knegedir-bq.html

面向对象

面向对象的三大特性:封装 继承 多态。

关键字 static 是一个修饰符,用于修饰成员(成员变量和成员函数)。特色:能够实现对象中的共性数据的对象共享,被静态修饰的成员能够直接被类名所调用,静态随着类的加载而加载。静态方法只能访问静态成员,不能够访问非静态成员,缘由是静态方法加载时,优先于对象,因此没法访问对象中的成员。静态方法中不能使用this super关键字,由于this表明对象,而静态在时,有可能没有对象,因此this没法使用。主函数是静态的。

成员变量和静态变量的区别:成员变量属于对象,也称实例变量;静态变量属于类,也称为类变量;成员变量存在于堆内存中;静态变量存在方法区中;成员变量随着对象建立而存在,随着对象被回收而消失;静态变量随着类加载而存在,随着类的消失而消失;成员变量只能被对象所调用,静态变量能够被对象调用,也能够被类名调用。因此,成员变量能够称为对象的特有数据,静态变量称为对象的共享数据。静态的生命周期很长。

静态代码块:就是一个有静态关键字标示的一个代码块区域。定义在类中。能够完成类的初始化,静态代码块随着类的加载而执行,并且只执行一次(new多个对象时就只执行一次),若是和主函数在同一类,优先于主函数执行。

静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 〉 构造代码块 〉 构造函数。

关键字 final 是一个修饰符,能够修饰类(修饰后不能够被继承)、变量(修饰后是一个常量,只能赋值一次)、方法(不能够被重载)。 

内部类:直接将A类定义在B类中,A类就称为内部类。内部类能够直接访问外部类的成员,而外部类想要访问内部类,必需要创建内部类对象。

匿名内部类:没有名字的内部类,就是内部类的简化形式。通常只用一次就能够用这种形式。匿名内部类其实就是一个匿名之类对象。想要定义匿名内部类:内部类必须继承一个类或者实现接口。

匿名内部类的格式:new 父类名或接口名  ( ) { 定义之类成员或者覆盖父类方法 }.方法名( );

异常

异常:程序在运行时候出现的不正常状况。Error:错误,须要修正程序解决;Exception:异常,能够有针对性处理方式。

线程

进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。

线程:进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间标示,线程负责的是应用程序的执行顺序。

随机性原理:由于cpu的快速切换,哪一个线程获取到了cpu的执行权,哪一个线程就执行。

线程的五种状态:

新建状态(New):线程对象被建立;

就绪状态(Runnable):可执行状态,随时可被cpu调度执行;

运行状态(Running):线程获取cpu权限进行执行;

阻塞状态(Blocked):阻塞状态是线程由于某种缘由放弃cpu使用权,暂时中止运行,直到线程进入就绪状态,才有机会转到运行状态;

消亡状态(Dead):线程执行完成了或者因异常退出了run()方法,该线程结束生命周期。

字符串

Java中,字符串一但被初始化,就不能够被改变,存放在方法区的常量池中。

StringBuffer 字符串缓冲区:构造一个其中不带字符的字符串缓冲区,初始容量为16个字符char,是一个长度可变的且能够存储任意类型数据的容器,since 1.0。

StringBuilder 字符串缓冲区:和StringBuffer相似,用在字符串缓冲区被单个线程是用的时候,两者区别,StringBuilder效率高,线程不安全,since 1.6。

一旦一个 String 对象在内存(堆)中被建立出来,它就没法被修改。String 类的全部方法都没有改变字符串自己的值,都是返回了一个新的对象。

若是你须要一个可修改的字符串,应该使用 StringBuffer 或者 StringBuilder。不然会有大量时间浪费在垃圾回收上,由于每次试图修改都有新的 String 对象被建立出来。

对于 String s = "a" + 变量 这样的能够用 StringBuilder 的 append() 方法替代,最后调用 toString() 方法(底层就是一个 new String())。

集合

集合是用于存储数据的容器。

集合和数组的区别:数组固定长度,集合可变长度;数组能够存储基本数据类型 或 引用数据类型,集合只能存储引用数据类型;数组存储的元素必须是同一类型,集合存储的元素能够是不一样数据类型。

数据结构:就是容器中存储数据的方式。

Collection :List 有序(ArrayList LinkedList Vector) 和 Set 无序(HashSet LinkedHashSet TreeSet)。

Iterator 迭代器:是一个接口,做用:用于取集合中的元素。

Map:

Hashtable: 底层是哈希表数据结构,线程安全,不可存 null 键 null 值, since 1.0;

HashMap:底层是哈希表数据结构,线程不安全,不能够存 null 键 null 值, since 1.2;

TreeMap:底层是二叉树结构,能够对Map集合中的键进行指定顺序的排序, since 1.2。 

IO流

流能够理解为数据的流动,就是一个数据流。IO流最终要以对象来体现,对象都存在IO包中。

流的分类:输入流和输出流;因处理的数据不一样又能够分为字节流和字符流。

字节流:处理字节数据的流对象。设备上的数据不管是图片或者dvd,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,因此计算机中的最小数据单元就是字节。意味着,字节流能够处理设备上的全部数据,因此字节流同样能够处理字符数据。 

那么为何要有字符流呢?由于字符每一个国家都不同,因此涉及到了字符编码问题,那么GBK编码的中文用unicode编码解析是有问题的,因此须要获取中文字节数据的同时指定的编码表才能够解析正确数据。为了方便于文字的解析,因此将字节流和编码表封装成对象,这个对象就是字符流。只要操做字符数据,优先考虑使用字符流体系。 

流的体系由于功能不一样,可是有共性内容,不断抽取,造成继承体系。该体系一共有四个基类,并且都是抽象类。

字节流:InputStream     OutputStream     字符流:Reader     Writer

在这四个系统中,它们的子类,都有一个共性特色:子类名后缀都是父类名,前缀名都是这个子类的功能名称。

close( )和flush( )的区别:
flush( ):将缓冲区的数据刷到目的地中后,流可使用。
close( ):将缓冲区的数据刷到目的地中后,流就关闭了,该方法主要用于结束调用的底层资源。这个动做必定作。

设计模式

单例:保证一个类在内存中的对象惟一性。

单例的其中两种建立方式:饿汉式 私有化构造函数,建立私有并静态的本类对象,定义公有并静态的方法,返回该对象;懒汉式 延迟加载方式

 

拓展阅读:

Java Web 知识总结

相关文章
相关标签/搜索