还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
java学问点总结1环境搭建及开发环境变量JAVA_HOME Java的安装书目;CLASSPATH指定一个路径列表,用于搜寻Java在编译或运行时须要用到的类.class文件;PATH指定一个路径列表,用于搜寻可执行文件JavaSDK应用编译:Javac类名.class;运行Java类名;打包jarcftest.jartest把当前书目下的test书目下的全部文件压缩到test.jar文件中2变量及常量Java中的常量用保留字final来实现变量局部变量localvariable实例变量instancevariable类变量classvariable;任何变量在运用前都必需初始化,局部变量必需显示初始化,实例变量在类的构造方法被调用时初始化支配默认值,类变量在类被加载时被初始化3标识符
3.1命名在Java语言中,标识符的定义规则是以字母,下划线,美元符起先,后面可以跟字母,下划线,美元符,数字因为Java语言运用Unicode字符集,所以对字母不仅限于英文,还可以是日文,韩文,阿拉伯文,中文等区分大小写,没有字数限制•参数的个数,依次,类型不相同重写继承类中;子类继承父类的方法;子类可以覆盖父类的方法,但是不能降低方法的访问权限不能比父类方法抛出更多的异样(只能比父类抛出的异样少,或者是其子类)向上转型把对某个对象的引用视为对其基类的引用向上转型中,调用的是子类的方法而不是基类的方法动态绑定java虚拟机调用一个类方法时,它会基于对象应用的类型(通常在编译时可知)来选择所调用的方法相反,当虚拟机调用一个实例方法时;它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动态绑定在处理java类中的成员变量时,并不是接受运行时绑定,而是一般意义上得静态绑定,所以在向上转型的状况下,对象的方法是子类的方法,但是属性是基类的属性假如试图调用子类的成员变量,可以将其封装成getter的形式Java识别对象和类信息RTTI(Run-timeTypeIdentification)运行时类型识别反射允许在运行时发觉和运用类型信息运行时类型识别在java中,全部的转型都会得到检查即使只是进行一次一般的括弧形式的类型转换,在进入运行期时照旧会对其进行检查,以确保它是我们所盼望的类型,假如不是就会返回一个ClassCastException这种在运行期间对类型进行检查的行为称作“运行时类型识别”(RTTI)类型信息的表示Class对象每个类都有一个Class对象(同名的.class文件)生成Class对象类加载器类加载器的工作时机当程序第一次创建对某个类的静态成员的引用时,就会将该类动态加载到JVM中(构造方法也被当作类的静态方法)为了运用某个类须要做的打算工作1)加载由类加载器执行检查该类的Class对象是否已经加载,假如尚未加载,则在classpath所指定的路径下查找.class文件(字节码);一旦某个类的Class对象载入内存它就用来创建该类的全部对象2)链接执行验证字节码,为静态域支配存储空间等操作3)初始化首次引用类的静态方法或特别数静态域时,对其初始化获得Class对象的引用的方法1)Class.forName(类的全限定名)假如该类还没有被加载,则加载它,并自动初始化2)类名.class不会自动初始化3)对象.getClass()•查询对象的类型信息对象instanceof类名类名.islnstance(对象)用equals和二二来比较Class对象时,不会考虑继承;而用instanceof和islnstance()推断时,会考虑类型信息(即是否从属于该类,是该类还是该类的派生类)反射•RTTI和反射的区分RTTI编译器在编译时打开和检查.class文件反射.class文件在编译时是不行获得的,在运行时打开和检查.class文件(从本地机器上获得或者从网络获得)o继承继承的几个原则子类方法的访问权限不能弱于基类方法的访问权限;子类方法抛出的异样不能大于基类方法抛出的异样;private的字段和方法不能被覆盖抽象类及抽象方法抽象方法是否可以同时为static是否可以同时为native是否可以同时为synchronized答因为父类的static方法只能被子类的static方法覆盖,不能表现出多态,因为多态是通过引用来实现的,所以abstract和static不行以同时运用;native方法是通过引入c/c++或其它本地语言来实现的,但在抽象方法中无法引入不同的实现,所以也不能同时运用;因为synchronzied同步的是同一对象,而不是不同实现的不同对象,所以synchronized和abstract也不能同时运用当一个类中包含有抽象方法时,该类必需被限定为抽象类;继承抽象类的子类必需实现基类中的全部抽象方法,否则便也是抽象类接口接口的特征接口没有构造方法;接口中声明的变量均为finalstaticpublic的;接口中定义的方法均为abstract和public的;接口中的数据成员必需初始化,而且均为常量接口本身具有public或者包访问权限两种可视性;接口中不供应任何方法体;接口内全部的域都是static和final的;接口内全部元素的可视性都是publico类的加载及初始化类的加载及初始化过程为加载必要的类先加载超类再加载子类,在加载过程中初始化static数据成员先执行超类的构造器,再执行子类的构造器;在执行构造器之前,初始化数据成员,对于没有供应初始值的数据成员,将基本类型设为默认初始值,对象引用设为nulL即超类的static成员变量f子类的static成员变量f超类的成员变量f超类的构造方法一子类的成员变量一子类的构造方法在外部类的静态方法或者在外部类以外的地方创建内部类对象OuterClassName.InnerClassName内部类用于外部类全部元素的访问权限;.this用于在内部类中生成对外部类的引用,如OuterClassName.this;.new用于在程序中其它地方创建对内部类的引用;必需运用外部类对象创建内部类对象如Outerouter=newOuter;Outer.Innerinner=outer.newInner;每个类都有一个.class文件,由此产生Class对象内部类的.class文件有严格的命名规则,即OuterClassName$InnerClassName.class13容器Vector(遗留)Stack(遗笛)ListIArrayListLinkedListHashMapIWeakHashMapMapJIdentityHashfvIap\Hashtable(ig^)TreeMapList的选择最佳做法将ArrayList做为默认首选,只有当须要额外的功能,或者当程序的性能因为常常从表中间进行插入和删除而变差的时候,才去选择LinkedList假如元素数量固定,既可以运用List也可以运用数组Set的选择Set的特性不保存重复元素,元素必需实现equals方法;不保证维护元素的次序
13.3Map的选择14多线程线程的五种状态创建状态new一个Thread对象后,新建的线程对象便处于创建状态;此时它已经有了内存空间,但是还没有为其支配资源,所以还处于不行运行状态就绪状态调用start方法你,线程便由创建状态进入就绪状态;此时,线程进入线程队列排队,等待CPU为其服务运行状态被调用并获得CPU等资源时,便进入运行状态,自动调用run方法堵塞状态假如发生了以下几种状况中的一种,便说明线程进入了堵塞状态1调用了该线程的sleep方法;2调用该线程的wait方法;3调用该线程的suspend方法;4该线程正在等待I/O操作完成当引起堵塞的缘由被消退后,线程进入就绪状态终止状态调用线程的stop方法或者destroy方法请说明什么是线程?线程是程序执行过程中,能够执行程序代码的一个执行单位,每个程序都至少有一个线程,即程序本身15包和访问限制16类集框架17数据库
17.1JDBC数据库编程JDBCJavaDatabaseConnectivity
3.2关键字staticstatic方法中不能有this和super关键字(static方法不是“面对对象”的,而是“面对类”的)static方法中只能访问所属类的static方法和变量static数据成员的初始化在第一次生成该类的对象时初始化finalfinal数据staticfinal更加典型的定义方式是publicstaticfinal;占用一段不能变更的存储空间;代表编译时常量,即在编译器就能知道其值(假如只声明为final或者static是在运行时才知道值)全部用大写字母命名,单词之间用下划线隔开final数据及final引用final数据的值不能被变更;final引用是指无法将其指向一个新的对象(数组也是一种引用),对象本身的值是可以变更的c)空白final(声明为final却未赋初始值)可以做到依据对象有所不同,又保持恒定不变的特性;必需保证运用前已经初始化在定义处赋值或者在构造器中赋值final参数•无法在方法中更改引用所指向的对象final方法禁止覆盖,防止任何继承类修改它的定义;private方法都是final的,因此private方法无法覆盖final类不允许继承该类;final类中的全部方法都隐式指定为final的
3.
2.3transient主要作用防止对象的敏感信息被序列化,保证平安性transient用于在一个特定对象的一个域上关闭序列化,当该对象被序列化时,transient型变量不包含在序列化表示中缘由对于某些敏感信息(如密码),一经序列化处理,便可以通过读取文件或者拦截网络传输的方式访问到4运算符算术运算符运算符假如被除数和除数都是整数,则商也是整数;假如被除数和除数中有一个是浮点数,商是浮点数;当被除数是整数类型时,零不能作为除数(运行时报错);当被除数是浮点型时,除数为0结果为Infinityo“%”运算符既可以对整型数据取模,也可以对实型数据取模;任何整数都不能对0取模;不管是整型还是实型的取模运算,余数的符号及被除数的符号相同(若a%b结果的符号及a相同)位运算符«:左移»带符号右移(最高位为则补0为1则补1)»>无符号右移(补0)假如对charbyteshort类型的数据进行移位处理,则在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值对charbyteshort进行运算时,都会得到一个int结果,必需将其显示地类型转换回原来的类型,在窄化转换的过程中可能会造成信息的丢失假如赋值运算符两边的数据类型不相同,则须要进行类型转换,即“向左看齐”;假如这种转换是由小向大的转换,系统将自动进行,假如是由大向小的转换,则需强制类型转换5数据类型new将对象存储在堆里,故用new来创建一个小的对象,特别是小的简洁的变量往往不是很有效,因此,java不用new来创建对象,而是创建一个并非是引用的自动变量,这个变量干脆存储值,并置于堆栈中,因此更加高效
5.1整型变量在进行带有byteshortint三种类型并存的表达式运算时,系统都会将short和byte都先提升为int类型浮点型变量单精度浮点型float32位;双精度浮点型double64位字符型数据•单引号括起来的单个字符;反斜杠(\)开头的字符;\u后接4位十六进制数字6数组
6.1初始化Java在声明数组时并不为其支配存储空间,因此在声明数组时不能指定数组的长度字符串String对象是不行变的,String类中每一个看起来会修改String值的方法,事实上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则未动分毫当把String对象作为方法的参数时,事实上是复制了一份引用String字符串常量StringBuilder字符串变量(非线程平安)StringBuffer字符串变量(线程平安)StringStringstr=newString(goocT);在内存的堆中创建一个good字符串对象Stringstr=good”;在Stringpool中创建good字符串对象StringBufferString及StringBuffer有什么区分?String的长度是不行变的,String对象中存放的字符串对象不行修改;StringBuffer的长度是可变的因此假如常常须要增加,删除或者修改字符串中的某些字符,用String就不便利,为了提高效率节约空间,应当运用StringBuffer
7.3StringBuilder8流程限制
8.1caseswitch跟在case后面的值必需是常量,不能是变量或表达式;switchexpr中,expr是一个整数表达式,因此传递给switch和case语句的参数应当是charshortinto9异样处理常见的运行时异样常见的检查时异样抛出异样的时候,异样处埋程序会依据代码的书写依次找出“最近”的处埋程序找到匹配的处理程序之后,它就认为异样将得到处理,然后就不再接着查找查找的时候并不要求抛出的异样和处理程序声明的异样完全匹配,派生类的对象也可以匹配其基类的处理程序10内存管理垃圾回收垃圾回收的优点java的垃圾回收机制使得程序员不再须要显示地支配和释放内存,避开了许多潜在的问题,如“内存泄露”何时垃圾回收为了提高系统效率,垃圾回收器通常只在满意以下两个条件时才运行有对象可回收;系统须要回收垃圾回收线程是一种低优先级的线程,只在系统空闲时才有机会运行,但在系统内存量过低的时候,可能会突发地执行来挽救内存资源垃圾回收器不行以被强制执行,但程序员可以通过调用System.gc方法来建议执行垃圾回收器垃圾回收算法根集正在执行的Java程序可以访问的引用变量的集合;大多数垃圾回收算法都运用了根集rootset的概念垃圾收集首先须要从根起先确定哪些是可达的和哪些是不行达的;从根集可达的对象是活动对象,不能作为垃圾被回收;根集通过随意路径都不行达的对象满意被回收的条件JVM的垃圾回收机制有多个算法,其中最简洁的是引用计数法,是用来推断对象是否已经被抛弃的,其它算法都是用来确定何时回收以及如何回收引用计数法没有运用根集当发觉某对象的引用计数为时,就将该对象列入待回收列表其它垃圾回收只及内存有关;对象可能不被垃圾回收假如JVM没有面临内存即将耗尽的情形,是不会奢侈时间去执行垃圾回收的,即无论是垃圾回收还是finalize都不保证确定会发生,所以不能过分依靠它们
10.2finalize方法用途每个对象都有一个继承自Object类的finalize方法,用于回收除内存之外的系统资源,如文件和网络连接等何时被调用一旦垃圾回收器打算好释放某个对象占用的存储空间,则将首先调用其的finalize方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存finalize方法可以被明确地调用,但它不能进行垃圾回收;假如某对象的finalize方法在执行时出现异样,该对象照旧可以被垃圾回收器回收11JavaI/O系统JavaNI01为什么运用NI0DK
1.4的java.nio.*包中引入了新的JavaI/O类库,其目的在于提高速度;速度的提高来自于所运用的数据结构更接近操作系统执行I/O的方式通道和缓冲器DK
1.4以前,始终运用流的方式完成I/O全部的I/O被视为单个字节的移动,通过Stream对象一次移动一个字节;NI0及原来的I/O有相同的作用和目的,但是它运用的是块I/O因此效率更高2概述什么是通道?通道是对原I/O包中流的模拟,到任何目的地或者来自任何地方的数据都必需通过一个Channel对象通道及流的不同之处在于通道是双向的,而流只在一个方向上流淌,通道可以读写或者同时读写什么是缓冲区?缓冲区实质上是一个容器对象;发给一个通道的全部数据必需先放到缓冲区中,同样地,从一个通道中读取的全部数据也必需先放到缓冲区中3非堵塞技术关键技术视察者模式监控I/O端口,假如有内容进来,会自动通知,这样就不必开启多个线程死等,实现了流畅的I/O不堵塞了内存映射文件RandomAccessFile内存映射文件允许我们创建和修改那些因为太大而不能放入内存的文件有了内存映射文件,我们就可以假定整个文件都放在内存中,而且可以把它当做特别大的数组来访问对象序列化Java的对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全复原为原来的对象这一过程甚至可以通过网络进行这意味着序列化机制能够自动弥补不同的操作系统之间的差异“许久化”意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间通过将一个序列化对象写入磁盘,然后在重新调用程序时复原该对象,就能够实现许久化的效果对象序列化的概念主要是为了支持两种特性一是Java的远程方法调用RemoteMethodInvocationRMI二是JavaBean序列化的意义如下1对象序列化可以实现分布式对象主要应用例如RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样;2另外,Java序列化不仅保存一个对象的数据,而且递归保存对象中引用的每个对象的数据,可以将整个对象层次写入字节流中序列化的步骤1创建OutputStream对象,然后将其封装在一个ObjectOutputStream对象内;2调用writeObject即可将对象序列化,并将其发送给OutputStream•反序列化步骤1将一个InputStream对象封装在一个ObjectlnputStream对象内,然后调用readObject;2将获得的Object引用向下转型12面对对象多态方法的多态性重载重写重载一个类中;多个相同的方法名;底层实现特性适用场合Vector/Stack版本较低,避开运用ArrayList数组访问快速默认选择;须要执行大量的随机访问LinkedList双向链表插入和删除代价低廉耍常常在表中插入或删除元素底层实现特性适用场合HashSet散列查询速度最快;元素必需定义hashCode方法默认选择LinkedHashSet散列+链表具有HashSet的查询速度;内部运用链表维护元素插入的次序;元素必需定义hashCode方法TreeSet红-黑树可以从Set中提取有序的序列;元素必需实现Comparable接口底层实现特性适用场合HashMap散列表插入和查询的开销是固定的;可以通过构造方法设置容量和负载因子,调整性能默认选择LinkedHashMap链表取得兀素的依次是其插入次序或者最近最少运用次序;插入时比HashMap略慢,但迭代时更快TreeMap红黑树总是保证有序;可以通过subMap方法返回一个子树WeakHashMap弱键映射允许释放映射所指向的对象ConcurrentHashMap线程平安,不涉及同步加锁TdentityHashMap用二二代替equals进行比较;插入操作不会随着Map尺寸变大而明显变慢基本数据类型整型byteshortintlong实型floatdouble字符型:char布尔型:boolean复合数据类型数组类接口数据类型所占位数值范围byte8位-128〜127short16位-32768〜32767int32位-231〜23」long64位33〜-263」数据类型所占位数值范围char16位0〜65536ThrowableError一般及硬件有关,由系统干脆处理,不需程序员处理ExceptionRuntimeException(运行时异样)lOException其它异样,必需catchArraylndexOutofBoundsException数组下标越界IndexOutofBoundsException索引下标越界ClassCastException强制类型转换异样NullPointerException空指针异样NumberFormatException字符串非法转换数字格式ClassNotFoundExceptiom找不到相关类IllegalAccessException访问类被拒绝InterruptedException线程被另一个线程中断NoSuchFieldException恳求的域不存在NoSuchMethodException恳求的方法不存在。