Java知识点总结.docx_第1页
Java知识点总结.docx_第2页
Java知识点总结.docx_第3页
Java知识点总结.docx_第4页
Java知识点总结.docx_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java总结1. 命名规则a) 必须使用字母,数字,_, $组成b) 不能以数字开头c) 不能使用关键字或保留字1.1 类名:所有单词首字母大写,其余小写(HelloWorld)1.2 变量:从第二个单词开始首字母大写,其余小写,使用名词(carColor)1.3 方法:从第二个单词开始首字母大写,其余小写,使用动词(qiChuang)1.4 包名:所有字母小写1.5 常量:所有字母大写,单词之间用_隔开2.基本数据类型2.1 数值型2.1.1 整型字节型Byte -128127 占1个字节短整型short-32768 32767占2个字节 整型 int -2147483648 2147483647 占4个字节长整型long-9223372036854775808 9223372036854775807占8个字节声明时可以带L/l2.2 浮点型2.2.1 float浮点型占4个字节 赋值时必须带F/f后缀 2.2.2double 双精度浮点型 占8个字节 可以带D/d后缀2.3 布尔型 boolean (true|false)2.4 字符型 char 占2个字节 取值范围 u0000 uffffchar必须被单引号表示,并且必须只能表示一个字符。java中的字符型采用Unicode字符集2.5引用数据类型 类,接口,数组2.6 类型转换自动类型转换/隐式转换: 小类型到大类型属于自动类型转换强制类型转换/显示转换: 大类型到小类型属于强制类型转换byte 或short的运算结果必须是intchar 和数值型可以互转3. 数组表示一组相同类型的数据集合。长度是固定的,类型固定。在内存中占用一块连续的空间。int intArray = new int10;int intArray = new int10,20,30,40,50,60;int intArray1 = 10,20,30,40,50,60;int intArray2;intArray2 = new int10,20,30,40,50,60;通过length属性来获取长度,通过下标访问元素(intArray1),如果超出范围则抛出异常:java.lang.ArrayIndexOutOfBoundsException4. 面向对象的特性4.1 封装将属性或方法通过private关键字修饰为私有的,只能由自己访问,提供一个或多个公开的方法给外部访问,可以在方法中添加自己的逻辑判断。隐藏类的实现细节,达到部分的代码安全,实现数据的安全准确性。4.2 继承从父类中获得其属性和方法的一种机制,减少重复代码。通过extends关键字来实现。* java只支持单继承。一个类只能有一个父类。但是一个父类可以有多个子类。* 在java中所有类都是直接或者间接的继承于java.lang.Object4.2.1 方法重写(Override): 在子类中声明一个跟父类中一样的方法覆盖从父类继承的该方法,达到扩展的目的。 1. 方法名,参数列表,返回值类型必须跟父类中的一致 2. 访问权限不能比父类中的更严格 3. 不能抛出比父类中更大的异常4.2.2 方法重载(Overload):在同一个类中实现多个相同名称的方法。达到在不一样的前提条件下实现相同的功能。1. 方法名必须相同2. 参数列表必须不一样(个数,类型,顺序)* 跟返回值类型无关4.3 多态当父类引用指向子类对象时就是多态。Person p = new ChinesePerson();* 如果子类中重写了方法,执行时会执行子类中的方法 如果子类中额外声明了方法,将不能被执行 对象造型(Casting)将父类类型对象转成子类类型对象(如果对象是用父类类型new出来的则会报错)ChinesePerson cp = (ChinesePerson) p;对象造型之前可以通过instanceof关键字判断对象是否是将要造型的类型。if(p instanceof ChinesePerson) ChinesePerson cp = (ChinesePerson) p;cp.sing();5.java的内存分配5.1 栈效率高,空间小通常用于保存局部空间的变量和引用5.2 堆效率低,空间大通常用于保存new出来的对象(也包含数组对象)6. 构造方法用于创建对象时对对象进行初始化的方法,跟类名一致,没有返回值位。new对象时会被执行。* 每个类都必须拥有至少一个构造法* 如果没有显示定义构造方法,虚拟机会自动给该类提供一个无参的默认构造方法* 一旦显示定义构造方法,虚拟机将不会提供默认构造方法* 构造方法可以重载* 构造方法不能被继承,所以也不能被重写7. this和super7.1 表示对象this表示当前类的当前对象super表示父类对象7.2 用于调用其他构造方法this用于调用当前类的其他构造方法*必须在第一行super用于调用父类构造方法*必须在第一行* 子类中的构造方法必须直接或间接调用父类的构造方法 如果没有显示调用则会执行super(); 8. 变量初始化(成员变量,初始化数组时)byte 0short 0int 0long 0Lfloat 0.0Fdouble 0.0Dboolean falsechar u0000引用数据类型 null9. 对象创建过程9.1 在栈中为引用创建空间9.2 当执行new的时候在堆中开辟空间并创建对象9.3 对对象进行属性初始化9.4 执行构造方法进行再次初始化9.5 将堆中对象的首地址赋值给栈中的引用空间10. 包java中用于解决命名冲突,以及管理众多类的机制。10.1 在类的第一行有效代码处编写package xxx.xxx.xx;10.2 引入其他包中的类import xxx.xxx.xx.Xxx;10.3引入整个包下的所有类import xxx.xxx.xx.*;10.4编译和执行包下的类(命令位置必须是在项目起始目录)e:/xxx - javac ./com/direct/MainClass.javae:/xxx - java com.direct.MainClass11. 抽象类不能被实例化的类(不能被创建对象),用abstract关键字来修饰。* 抽象方法:没有方法体的虚方法。用abstract修饰。* 包含抽象方法的类必须是抽象类。* 抽象类也可以不包含抽象方法。* 抽象类也可以包含非抽象方法。* 子类必须重写实现父类中的抽象方法。不然也必须定义为抽象类。12. 接口完全抽象体,只能包含抽象方法和常量。用interface关键字来修饰。* 接口中的方法必须是public abstract的* 接口可以继承接口,可以多继承* 类可以实现多个接口(用implements来实现)* 接口没有构造方法13. final修饰类: 最终类,不能被继承。修饰方法:最终方法,不能被重写修饰变量:最终变量,常量,一旦赋值不能被改变14. static方法:静态方法,属于类的方法,使用类名.方法名()来访问属性:静态属性,属于类的变量,使用类名.变量名来访问。每一个类只有一份该对象。(跟对象无关)在静态方法中不能访问非静态方法和属性以及使用this和super关键字。代码块:静态代码块 static . 当类被加载时会被执行。因为每个类只会加载一次,所以该代码库只会执行一次。15. 单例模式 一个类只允许被创建一个对象。 三要素 15.1 私有化构造方法 15.2 创建静态的私有的本类对象(单例对象) 15.3 提供公开的静态方法供外界获取单例对象16. 访问权限 public protected friendly/default/缺省 private当前类 同包 子类 其他 16. Object类toString: 用于将当前对象转成String *默认Object中的实现为return getClass().getName() + + Integer.toHexString(hashCode();getClass:获取对象所属类equals: 提供用于比较引用数据类型是否相等的方法,必须在类中重写才有效。hashCode: 唯一区分每个对象的hash码17. 可变字符串因为String被设计为final并且其底层采用常量字符数组来表示,所以String对象中的内容不能更改。当需要做大量字符串连接时java会创建大量无用对象占用内存。可以使用StringBuffer或StringBuilder这样的可变字符串来实现字符串的连接。StringBuilder buffer = new StringBuilder(zhangsan);buffer.append(,lisi);buffer.append(,wangwu);buffer.append(,zhaoliu);String str1 = buffer.toString();StringBuffer和StringBuilderStringBuffer jdk1.0时产生的,重量级,线程安全的,效率低StringBuilder jdk1.5时产生,轻量级,非线程安全的,效率高18 GC(Garbage Collection)垃圾回收机制垃圾回收机制是java虚拟机提供的自动释放无用对象的内存空间的机制。当对象不再被引用时,就视为垃圾对象,就有可能会被回收。自动运行,在程序中无法干预。可以建议,但不一定被采纳。/ 建议虚拟机进行垃圾回收,但虚拟机不一定采纳System.gc();/* * 当垃圾回收器将要回收该对象时被调用 * 该方法只会被调用一次 * * 由Object类定义的方法,java虚拟机自动调用,程序中只需要重写即可 */protected void finalize() throws Throwable System.out.println(被回收时执行);19. 日期时间处理19.1 Date表示时间类型/ 创建指定时间对象Date d = new Date(1000);/ 创建当前时间对象(等同于new Date(System.currentTimeMillis()Date d = new Date();/ 获取时间对象表示的毫秒数long ms = d.getTime()19.2 Calendar日历处理/ 获取日历对象,默认日历翻到当前时间Calendar c = Calendar.getInstance();c.setTime(new Date(1000); / 翻到1970年1月1日 0时0分1秒处 也可以写为: c.setTimeInMillis(1000);/常量Calendar.YEARCalendar.MONTH / 0 - 11Calendar.DATECalendar.HOUR_OF_DAYCalendar.MINUTECalendar.SECONDCalendar.MILLISECONDCalendar.DAY_OF_WEEK / 1-7 SUNDAY - SATURDAYCalendar.WEEK_OF_MONTHCalendar.WEEK_OF_YEAR/ get 方法 获取对应字段的值int year = c.get(Calendar.YEAR); / 获取年int month = c.get(Calendar.MONTH); / 获取月 0 - 11/ set 方法 设置字段值c.set(Calendar.MONTH, 11);/ add 方法 在当前时间上的特定字段上翻动c.add(Calendar.DATE, -3);/ roll方法 在当前时间上的特定字段上翻动 不影响其他字段c.roll(Calendar.DATE, -1);/ 翻到本月的最后一天c.set(Calendar.DATE, 1);c.roll(Calendar.DATE, -1);19.3 SimpleDateFormat日期和字符串互转工具类/ 创建格式化对象SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);或SimpleDateFormat sdf1 = new SimpleDateFormat();sdf.applyPattern(yyyy年MM月dd日 HH时mm分ss秒 E);/ 将时间对象转成制定格式字符串String str = sdf.format(new Date();/ 将制定格式字符串转成时间对象Date d = sdf.parse(ds);20. 异常程序运行中出现的错误。会打断程序正常执行。是java中提供的一种错误提示和处理的机制。20.1 异常分类错误(ERROR):通常指不是由程序造成并且在程序中不能处理或避免的错误。比如:内存溢出,Java虚拟机出错等异常(Exception):通常指由于程序代码不严谨造成的可以避免的错误或在程序中可以预先处理的错误。20.2 抛出异常通过throw关键字抛出异常throw new IndexOutOfBoundsException();通过throws关键字在方法上标注有可能会发生的异常20.3 异常处理try . / 尝试执行可能会发生异常的代码块 catch(.) / 捕捉try块中发生的异常并处理. catch(.) . catch(.) . finally / 必须执行块,无论try中是否发生异常,该块都会被执行,即使try中有return也会在return之前被执行.* 多重catch时父类异常必须写到子类之后。20.4 自定义异常只需继承Exception或RuntimeException即可实现自定义异常21. 集合(Collection)/ 容器(Container)集合结构中的根接口,定义集合的基本方法(add,addAll,remove,contains,clear,iterate.等)21.1 List(有序可重复)有序集合,会记录存放到容器中的元素的顺序,并且可以按索引获取对应的元素。允许重复元素21.1.1 ArrayList底层采用数组来实现,按下标查找数据效率高,需要在内存中开辟连续空间来存储,需要扩容和缩容在中间插入和删除数据时会导致其后的所有元素移动,所以中间操作效率低非线程安全的,效率高21.1.2 LinkedList底层采用双向链表来实现,按下标查找数据效率低,不需要在内存中开辟连续空间来存储,在中间插入和删除数据时效率高非线程安全的,效率高21.1.3 VectorJDK1.0时实现的可变数组,底层采用数组来实现,跟ArrayList的特点相似线程安全的,效率低21.1.4 Stack 数据结构栈的实现(FILO)21.2 Set(无序不可重复)无序集合,不会记录存放顺序,不能按索引获取元素,不允许重复元素。21.2.1 HashSet采用hash表实现的不可重复的set,要求被添加的元素类重写hashCode和equals方法当被加入的对象已经存在时就不会再次添加到set中21.2.2 SortedSet实现了排序的set,要求被排序对象必须实现Comparable接口或者必须传入实现了Comparator接口的比较器来实现对象的比较21.2.3 TreeSet(排序set的实现类)22. Map(jdk1.2)键值对集合,key不能重复。22.1 HashMap(jdk1.2)基于hash表实现的键值对集合轻量级,非线程安全的,效率高允许null作为键或值22.2 Hashtable(jdk1.0,继承Dictionary来实现,jdk1.2之后也实现了Map接口)也是基于hash表实现的键值对集合 重量级,线程安全的,效率低不允许null作为键和值22.3 TreeMap基于红黑树实现的排序的mapProperties表示了一个持久的属性集(可保存在流中或从流中加载)* 两个对象相等一定要有相同的hashCode23. List的三种迭代方/* * 遍历list方式一: */for(int i=0;ilist.size();i+) Object v = list.get(i);System.out.println(v);/* * 遍历list方式二: */for(Object o : list) System.out.println(o);/* * 遍历list方式三: * 迭代器模式,迭代子 */Iterator it = list.iterator();while(it.hasNext() Object o = it.next();System.out.println(o);24. Set的迭代方式:/* * 遍历list方式二: */for(Object o : set) System.out.println(o);/* * 遍历list方式三: * 迭代器模式,迭代子 */Iterator it = set.iterator();while(it.hasNext() Object o = it.next();System.out.println(o);25. Map的迭代方式/ map中的键的setSet ks = map.keySet();for(Object key : ks) System.out.println(key + : + map.get(key);/ map中的值的集合Collection values = map.values();for(Object v : values) System.out.println(v);/ 获取map中的键值对为set集合Set entrys = map.entrySet();for(Object o : entrys) Entry e = (Entry) o;System.out.println(e.getKey() + : + e.getValue();26. Collections由jdk提供的用于操作Collection的工具类,其中包含了大量的工具方法(如:sort,reverse,max,min等)27. Arrays由jdk提供的用于操作数组的工具类,其中包含了大量的工具方法(如:sort,fill,toString,equals, copyOf,binarySearch等)28. File boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。 boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。 int compareTo(File pathname) 按字母顺序比较两个抽象路径名。 boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 boolean delete() 删除此抽象路径名表示的文件或目录。 boolean exists() 测试此抽象路径名表示的文件或目录是否存在。 String getName() 返回由此抽象路径名表示的文件或目录的名称。 String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 String getPath() 将此抽象路径名转换为一个路径名字符串。 boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。 boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。 long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。 long length() 返回由此抽象路径名表示的文件的长度。 String list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 String list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 File listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 File listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 File listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 static File listRoots() 列出可用的文件系统根。 boolean mkdir() 创建此抽象路径名指定的目录。 boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。 boolean setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。 boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。 boolean setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。 boolean setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。 boolean setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。 29. I/O流 (In/Out Input/Output InputStream/OutputStream)29.1 按方向划分:输入流:InputStream,Reader输出流: OutputStream,Writer29.2 按操作数据类型划分:字节流: InputStream,OutputStream字符流: Reader, Writer29.4 InputStream字节输入流的超类(源流) FileInputStream文件输入流int read(): 从流中读取下一个字节int read(byte buffer): 从流中读取buffer.length个字节到buffer数组中.返回读取到的长度,如果没读到数据则返回-1ByteArrayInputStream针对内存中的字节数组的输入流|(装饰流) ObjectInputStream对象输入流,从其他源流中读取由ObjectOutputStream已经写入好的对象Object readObject(): 从流中读取一个对象29.5 OutputStream字节输出流|(源流) FileOutputStream文件输出流void write(int data): 将一个字节的data数据写到流中void write(byte buffer, int offset, int length): 将buffer中的数据从offset处开始写入length个到流中ByteArrayOutputStream 针对内存中的字节数组的输出流(通常用于临时保存数据到内存中)(装饰流)ObjectOutputStream对象输出流,将对象写入到其他源流中,供ObjectInputStream读取void writeObject(): 向流中写入一个对象|29.6 WriterFileWriterBufferedWriter29.7 ReaderFileReaderBufferedReader29.8 适配器流(将字节流转换为字符流)InputStreamReaderOutputStreamWriterBufferedReader br = new BufferedReader(new InputStreamReader(fis);BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos);30. 对象克隆30.1 浅克隆由JDK提供的API实现,只会克隆当前对象,不会克隆其关联对象。效率高。30.1.1 必须实现java.lang.Cloneable30.1.2 必须重写clone方法(*必须在clone方法中调用super.clone())30.2 深克隆由对象流将对象序列化到内存或文件之后再读取出来成为新对象,会克隆整个对象及所有关联对象。效率低。* 将对象写入到硬盘或内存以及在网络上传输等过程称之为序列化,被序列化的对象必须实现了Serializable接口,否则会抛出java.io.NotSerializableException* 对象被序列化时不会讲trnsient的属性序列化.* 使用完流之后必须关闭.需要将关闭动作在finally中完成(关闭之前最好判断被关闭流是否为空)31. 多线程31.1 什么是进程?正在运行中的程序。31.2 什么是线程?进程中的一个执行单元,一个进程中至少包含一个线程。线程不能单独存在,必须在某个进程中。31.3 什么是多线程?一个进程中有多个执行单元,可以同时完成不同的操作。32. 实现多线程32.1 继承Thread类实现,重写run方法。32.2 实现Runnable接口实现* 启动线程必须是用start33. 停止线程* 不要使用Thread提供的stop方法来实现停止线程* 通过提供公开的方法来更改执行标志的方式来让线程中的代码完成执行,以达到来停止线程的目的。34. 常用方法long getId(): 获取线程的id(id是由jvm自动分配)void setName(): 设置线程的名称String getName(): 获取线程的名称void setPriority(): 设置优先级1(MIN_PRIORITY)10(MAX_PRIORITY) 默认为5(NORM_PRIORITY)int getPriotiry(): 获取线程的优先级值void join(): 等待指定线程执行完成static void currentThread(): 获取当前执行的线程对象static void sleep(): 让当前线程休眠(暂停执行)指定毫秒数static void yield(): 让当前正在执行的线程变回可运行状态,CPU重新选择线程执行(有可能还会选择到该线程)35. 线程同步synchronizedsynchronized块让多个线程使用同一个锁资源,必须得到锁资源的线程才能执行,其他线程必须等待该线程执行完之后释放锁资源之后才能获取锁并执行synchronized方法在方法上用synchronized修饰,当一个线程在执行对象的同步方法时,其他线程将不能执行该对象的任意同步方法,但可以执行非同步方法*如果是静态方法,则所有静态方法使用的是同一把锁,跟普通方法互不影响Lock36. wait notifywait: 让当前正在使用该对象的线程进入等待状态,进入等待状态之后必须被notify或notifyAll唤醒notify: 随机唤醒一个正在当前对象上等待的线程notifyAll: 唤醒所有在当前对象上等待的线程37. 网络37.1 TCP可靠,安全。需要建立和断开连接。保证数据的准确和安全性。效率低。传输大小无限制。客户端:Socket s = new Socket(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论