JavaSE学习总结.docx
- 文档编号:24109607
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:26
- 大小:336.03KB
JavaSE学习总结.docx
《JavaSE学习总结.docx》由会员分享,可在线阅读,更多相关《JavaSE学习总结.docx(26页珍藏版)》请在冰豆网上搜索。
JavaSE学习总结
Java基础笔记与总结
目录
Java的跨平台特性2
JVM加载class文件原理2
标识符2
数据类型3
数据类型转换4
数据的表示法4
面向过程思想(OOP)5
面向对象编程的特征5
Q:
Java中的多态是怎么实现的?
5
抽象类&抽象方法6
Q:
抽象类能否被实例化?
6
接口6
Q:
说出几种常见的接口?
7
异常7
Q:
error和exception有什么区别?
【基础】7
Q:
Java的异常处理机制?
7
Q:
运行时异常与一般异常有何异同?
【基础】8
Q:
说出你最常见到的runtimeexception?
【基础】8
Q:
final,finally,finalize的区别?
【基础】8
Q:
throws和throw的区别:
9
Q:
throw和throws必须同时使用吗?
9
集合框架:
9
集合框架接口9
LinkedList、ArrayList和Vector集合类型的区别和联系?
13
Vector和ArrayList区别:
13
hashmap,hashtable,TreeMap,WeakHashMap的区别和联系?
14
Comparable接口14
什么是泛型15
输入输出流15
多线程16
线程的创建方法16
sleep和wait的区别19
Java网络编程19
网络的分类19
OSI的分层思想20
IP地址-标识网络上每一台计算机20
Socket20
Java的跨平台特性
●Java是平台无关的语言,Java应用程序不用修改就可在不同的软硬件平台上运行
●通过JVM(JavaVirtualMachine)实现
●Java虚拟界可以屏蔽任何系统的差异性,实现了java程序可以一次编译到处运行的跨平台特性
JVM加载class文件原理
程序启动时,首先由编译器将.java文件编译为.class字节码文件,然后通过类加载器将class文件夹在到jvm中,然后由字节码校验器对class文件进行校验(java的安全性),通过校验后再通过解释器和JIT代码生成器发给操作系统。
标识符
●标识符的定义:
变量、类、接口、方法等的名称
●命名规则:
1.由数字、字母、下划线(_)、美元符号($)组成
2.字母、下划线(_)或美元符号($)开始
3.区分大小写,无长度限制
4.标识符不能是关键字
●注意
–所有关键字都小写
–gotoconst也是Java关键字
–truefalse不是Java关键字
数据类型
●基本数据类型(4类8种)
⏹逻辑型boolean
⏹字符型char
⏹整型byteshortintlong
⏹浮点型floatdouble
⏹
●原始数据类型
Java提供两种不同的类型:
引用类型和原始类型(或内置类型)。
Int是java的原始数据类型,Integer是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类
boolean-->Booleanchar--->Characterbyte-->Byte
short-->Shortint-->Integerlong-->Long
float-->Floatdouble-->Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:
大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。
同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:
Integer、Short、Long、Byte、Float、Double、Character等。
他们都提供了从字符串解析出获得基本类型封装类的方法valueOf(Strings),同时可以获得基本类型值的intValue()、shortValue()、longValue()...等。
因为封装类型是对象,所以可以进行相应的很多对象能力函数操作,这样就可以提供很多基本类型难以完成的工作的完成和实现。
数据类型转换
●字符串类型String转换成整数int
1).inti=Integer.parseInt([String]);或
i=Integer.parseInt([String],[intradix]);
2).inti=Integer.valueOf(my_str).intValue();
●如何将整数int转换成字符串String
下面三种方法都可以:
1.)Strings=String.valueOf(i);
2.)Strings=Integer.toString(i);
3.)Strings=“”+i;
注:
Double,Float,Long转成字符串的方法大同小异
数据的表示法
●十进制
123=1x10*10+2*10+3*1=123
●二进制
1011=1*2*2*2+0*2*2+1*2+1*1=11
●八进制
712=7*8*8+1*8+2*1=458
●十六进制
5FA=5*16*16+15*16+10*1=1530
面向过程思想(OOP)
面向过程和面向对象的区别:
•面向过程的
–程序被认为是在一个数据集合上进行的一系列操作
–面向过程是在方法(函数)层次上重用代码
•面向对象编程(ObjectOrientedProgramming)
–实质是把数据(属性)和处理这些数据的过程(方法)合并为一个单独的“对象”――一个具有确定特性的自完备的实体
–面向对象是在对象层面上重用,更高级、更抽象
面向对象编程的特征
–封装
•指能够把一个实体的数据,属性都装入一个单独的对象中的特性
•客户不必关心类的工作机理就可以使用它。
•所有对数据的访问和操作都必须通过特定的方法,从而达到数据隐藏的目的
–继承
•一个类继承自另一个类,子类就自动拥有父类的所有属性和方法。
子类也可以拥有自己的属性和方法。
•这有利于减少重复编码,提高软件的开发效率
–多态
•同一指令根据指向的对象的不同产生不同的结果。
•前提:
面向对象中的多态
–三个条件:
子类继承父类,子类覆盖父类,父类指向子类
Q:
Java中的多态是怎么实现的?
重写和重载
多态:
父类和借口有了统一写法的机制,通过extends和implements形成多个类的实例化,而通过接口和父类可以产生多个子类,input一致而output不同。
重写和重载的区别:
重载(overload)是在同一个类中,而重写(override/overwite)是在父子类中;
重载的方法名相同,参数类型和数量不同,而重写,参数的数据类型必须与父类相同。
访问控制
修饰符
同一个类中
同一个包中
子类中
全局
private
Yes
default
Yes
Yes
protected
Yes
Yes
Yes
public
Yes
Yes
Yes
Yes
•类(非内部类)的修饰符只有两种:
public和default
继承中的构造
•规则
–构造方法不能被继承
–方法和属性可以被继承
–子类的构造方法自动调用父类的默认构造方法
–当父类没有默认的构造方法时,子类必须显示调用父类的构造方法
抽象类&抽象方法
抽象类中不一定有抽象方法,但抽象方法必须在抽象类中;
•注意
•抽象类不能被实例化
•抽象类只能是超类
•继承抽象类的子类,必须实现抽象方法,或者本身也是抽象类
Q:
抽象类能否被实例化?
抽象类通常不是由程序员定义的,而是由项目经理或模块设计人设计抽象类的原因通常是为了规范方法名抽象类必须要继承,不然没法用,作为模块设计者,可以把让底层程序员直接用得方法直接调用,而一些需要让程序员覆盖后自己做得方法则定义称抽象方法
接口
•注意
–接口只有方法的定义,而没有方法的实现
–接口像一个“管理者”,只告诉你做什么,而不管怎么做
–接口中的属性默认是publicstaticfinal的,也只能是这样
–接口中的方法默认是publicabstract的,也只能是这样
•接口的实现
•使用implements关键字实现接口
–一个类实现接口必须实现接口中的所有方法
–一个类可以实现多个接口
–接口可以实现多态
Q:
说出几种常见的接口?
Connection所有集合类接口的父类(子接口有:
ListMap)
Document
Jparable对象排序
Java.lang.runable线程运行
ActionListener(java.awt.event事件处理)
还有:
ServletHttpServletRequestHttpServletResponseTransaction(Hibernate)、Session(Hibernate)HttpSession等。
异常
异常是Java在运行期出现的错误
Q:
error和exception有什么区别?
【基础】
答:
error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
Q:
Java的异常处理机制?
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。
当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Java的异常处理是通过5个关键词来实现的:
try、catch、throw、throws和finally。
一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
●try用来指定一块预防所有“异常”的程序;
●catch子句紧跟在try块后面,用来指定你想要捕捉的“异常”的类型;
●throw语句用来明确地抛出一个“异常”;
●throws用来标明一个成员函数可能抛出的各种“异常”;
●Finally为确保一段代码不管发生什么“异常”都被执行一段代码;
Q:
运行时异常与一般异常有何异同?
【基础】
答:
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
Q:
说出你最常见到的runtimeexception?
【基础】
答:
BufferOverflowException,BufferUnderflowException,
CannotRedoException,CannotUndoException,
ClassCastException,IllegalArgumentException,
IllegalPathStateException,IllegalStateException,
IndexOutOfBoundsException,MissingResourceException,
NoSuchElementException,NullPointerException,
SecurityException,SystemException,
Q:
final,finally,finalize的区别?
【基础】
答:
final:
修饰符(关键字);修饰类,意味着它不能被继承因此一个类不能既被声明为abstract的,又被声明为final的;修饰变量时,变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;修饰方法也同样只能使用,不能重载。
finally:
再异常处理时提供finally块来执行任何清除操作;如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize:
方法名;Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
Q:
throws和throw的区别:
–使用throw是在方法体中抛出异常对象,throws是在方法声明中抛出异常(有多个异常时,用,隔开);
–Thow手动跑出一个异常,如果抛出的是检测异常,必须与throws连用,如果抛出的是非检测异常,则不用;
Q:
throw和throws必须同时使用吗?
答:
不是,
●当throw抛出的是非检测异常时,就不用throws;
●当方法没有捕获,直接抛出异常时就只用throws而不用throw;
●反过来说,只有当throw显示抛出的是检测异常时,必须在方法声明出写throws此时我们才会看到两者同时出现;
集合框架:
集合框架接口
–List继承Collection接口,存储的数据对象有序可重复
–Set继承Collection接口,存储的数据对象无序不重复
–Map是一组成对的键-值对象,即所持有的是key-value对。
Map中不能有重复的key
–
*List,Set继承自collection接口,而Map不是
集合中常用方法:
LinkedListlist=newLinkedList();
list.add("Red");
list.add("Linda");
list.add("Stephen");
//①反转Collections.reverse(list);
//②排序:
Collections.sort(list);
//③随机打乱:
Collections.shuffle(list);
for(Iteratorit=list.iterator();it.hasNext();)
{
Stringname=(String)it.next();
System.out.println(name);
}
List接口及其实现类
–ArrayList:
list接口的大小可变数组的实现
–LinkedList:
链表,它添加了一些处理列表两端元素的方法
Iterator接口:
–booleanhasNext()
–Objectnext()
–voidremove()
前两种方法用来迭代,遍历元素
LinkedList遍历元素
Set
//遍历元素
Map遍历元素
方法一:
keySet
1.调用keySet()方法,返回所有的键值,放在一个set中,用set就能遍历元素了;
2.用set中的iterator()方法取出所有的key,
3.然后根据键key取出值get(key)方法
方法二:
entrySet
1.调用entrySet()方法,得到一个包含键值对的set,这里的键值对叫做Map.Entry(一个Entry代表一个键值对,Entry是Map中的一个内部类,或内部接口);
2.Map.Entry里有getKey()和getValue()方法,然后用这两种方法得到键和值;
LinkedList、ArrayList和Vector集合类型的区别和联系?
LinkedList类:
LinkedList实现了List接口,允许null元素。
此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部.
ArrayList类:
ArrayList实现了可变大小的数组。
它允许所有元素,包括null。
ArrayList没有同步.
Vector类:
Vector非常类似ArrayList,但是Vector是同步的。
由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出.
Vector和ArrayList区别:
1,vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。
如果不考虑到线程的安全因素,一般用arraylist效率比较高。
2,如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。
3,如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,这个时候使用vector和arraylist都可以。
而如果移动一个指定位置的数据,这个时候就应该考虑到使用linklist,
arraylist和linkedlist
1,ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2,对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3,对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4,这一点要看实际情况的。
若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。
但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
hashmap,hashtable,TreeMap,WeakHashMap的区别和联系?
在Map对象中,每一个关键字最多有一个关联的值。
Map:
不能包括两个相同的键,一个键最多能绑定一个值。
null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示Map中没有该键,也可以表示该键所对应的值为null。
因此,在Map中不能由get()方法来判断Map中是否存在某个键,而应该用containsKey()方法来判断。
继承Map的类有:
HashMap,HashTable
HashMap:
Map的实现类,缺省情况下是非同步的,可以通过MapCollections.synchronizedMap(Mapm)来达到线程同步
HashTable:
Dictionary的子类,确省是线程同步的。
不允许关键字或值为null
当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。
Hashtable的使用不被推荐,因为HashMap提供了所有类似的功能,并且速度更快。
当你需要在多线程环境下使用时,HashMap也可以转换为同步的。
映射:
HashTable:
实现一个映象,所有的键必须非空。
为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。
这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。
HashMap:
实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。
WeakHashMap:
实现这样一个映象:
通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。
这与HashMap形成对照,映象中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。
TreeMap:
实现这样一个映象,对象是按键升序排列的。
Comparable接口
所有可以排序的类都实现了java.lang.Comparable接口
这个接口只有一个方法:
publicintcompareTo(Objectobj)
什么是泛型
一种类型占位符,或称之为类型参数
主要用于集合类中,减少类型转换带来的复杂度,提高程序运行的效率
输入输出流
流的分类
•按流的方向
输入和输出是站在程序的角度考虑,程序读文件是输入,写文件是输出
–输入流
–输出流
•按处理数据单位不同
–字节流(8位一个字节)
主要处理二进制文件,如压缩文件,图片,视频等;
–字符流(16位两个字节)
适合处理中文,日文,韩文等双字节保存的数据
•按功能划分
–节点流
程序直接从数据源(节点)读写数据
–处理流
是“连接”在已经存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强的读写能力
通过流复制文件:
FileInputStreamfin=newFileInputStream("E:
/hua.jpg");
BufferedInputStreamin=newBufferedInputStream(fin);
FileOutputStreamfou=newFileOutputStream("E:
/document/abc.jpg");
BufferedOutputStreamout=newBufferedOutputStream(fou);
byte[]b=newbyte[1024];
intlength=-1;
①:
while((length=in.read(b))!
=-1){
out.write(b,0,length);
}
②:
Strings=null;
while((s=reader.readLine())!
=null)
{
writer.write(s);
writer.newLine();
}
out.flush();
//fin.close();
in.close();
//fou.close();
out.close();
打印流
•PrintStream
•PrintWriter
•都属于输出流,分别针对字节流和字符流
•都有自动flush的功能
如:
system.out.println(“”);
标准输出流,默认打印到控制台
重新设置输出位置:
setout();
System中的静态方法,可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaSE 学习 总结