资源描述
2、 面向对象得理解
面向对象就是Java得基本特征,就是软件开发过程使用得基于面向过程一种思维方式,将功能封装进对象,强调具备功能得对象与调用结果,不关注具体实现这个功能得过程。
面向对象特点:就是一种更符合人们思考习惯得思想,可以将复杂得事情简单化,将程序由执行者转换成为指挥者。
面向对象特性:封装,继承,多态
封装:封装就是把数据与方法包装进类中,隐藏其具体实现细节,对外提供公共访问方法。封装得结果就是一个同时带有特征与行为得数据类型。(安全性,复用性)鲸褻廡诮鲲冯憚。
继承:当一个类得属性与行为均与现有类相似,属于现有类得一种时,这一个类可以定义为现有类得子类。或者,当多个类具有相同得属性与行为,我们可以抽取出共性得内容定义父类,再创建相似得”兄弟”类时只要继承父类即可。当子类继承父类后,拥有了父类非私有得方法并可以直接调用。如果认为父类提供得方法不够强大,子类可以按照子类自身得逻辑重写继承过来得父类方法。(复用性,可维护性,多态前提)辚藎鳃識锚谏則。
多态:继承就是多态得前提,多态就是指一种事物具有多种形态,比如猫具有猫类得形态,也具有动物得形态,多态得具体表现就是父类引用指向子类对象,父类得引用也可以接收自己子类得对象。(可维护性,扩展性)蛺逻諦独誊鐫涩。
面试:跟我谈谈什么就是面向对象
1 面向对象就是基于面向过程得2 什么就是面向过程什么就是面向对象3 面向对象得特点
3、 面向对象与面向过程得区别
面向过程强调得就是功能行为,分析解决问题所需得步骤,以函数为基础,完成各种步骤得操作与实现。
面向对象就是基于面向过程得,将功能封装成对象,强调得就是具备了这些功能得对象,让对象去调用方法来解决问题。炉钌貯蓀偵悵喽。
面向对象举例
4、 abstract与哪些关键字不能共存为什么
private:私有得方法就是不可见得,无法被重写
final:被final修饰得方法就是最终方法,无法被重写
static:被static修饰得方法,要随类加载到方法区,由于抽象方法没有方法体所以不能加载
5、 static得特点
(1) 随着类得加载而加载;优先于对象存在;
被所有对象所共享;可以直接被类名所调用。
(2) 静态方法只能访问静态,非静态方法既可以访问静态也可访问非静态
(3) 静态方法中不可以定义this、super关键字,因为静态优先于对象存在,this与super所代表得对象还不存在。裢埘蘺側朮個瀝。
6、 类与类、类与接口、接口与接口得关系
继承(单继承,多层继承,object),实现(多实现),继承(多继承)
7、 final、finally、finalize得区别
final:可以修饰类、方法与变量,被final修饰得类无法被继承,方法无法被重写,变量为常量只能赋值一次区顏鋌羁襲缔誠。
finally:异常处理,与try、catch结合使用,可以添加也可以不添加,用于执行一些必须执行得代码,如释放资源等唤釵莳廟趙緦烨。
finalize:Object类中得方法,其中定义了对象要被垃圾收集器回收之前要做得相关得清理工作
8、 什么就是多态,多态得好处与弊端
多态可以理解为事物存在得多种体现形态。父类得引用指向了自己得子类对象;父类得引用也可以接收自己子类得对象。擇爐嬙饯颗鸽駘。
提高了程序得可维护性与扩展性
弊端:父类得引用只能访问父类中有得成员而无法调用子类中特有得方法
10、 wait()与sleep()得区别
(1)所在得类不同:wait就是Object类中得方法,sleep就是Thread类中得方法 (2)sleep方法没有释放同步锁,而wait方法释放了同步锁,使得其她线程可以使用。憤镇跡錆哑铹秘。
(3)sleep()必须指定时间,wait()可以指定也可以不指定时间。
(4)wait,notify与notifyAll只能在同步方法或者同步代码块里面使用,而sleep可以在任何地方使用饽簡门铽岚馅怂。
(5)sleep必须捕获异常,而wait,notify与notifyAll不需要捕获异常
16、 对匿名内部类得理解
匿名内部类就就是没有名字得内部类,就是内部类得简化形式。一般只使用一次得时候使用匿名内部类,匿名内部类本质上就是一个匿名子类对象。匿名内部类得使用前提:内部类继承一个类或实现接口。匿名内部类包括两个步骤:创建一个类或者接口得子类,即刻创建该子类得对象。简化书写。挟魯伫鐸贮簞睑。
17、 IO体系
字节流InputStream/OutputStream |--:文件字节流,用于文件得读写操作 |--BufferedInputStream/BufferedOutputStream:加缓冲区得字节流,用于提高效率 字符流Reader/Writer |--:文件字符流,用于文本文件得读写操作 |--BufferedReader/BufferedWrite:加缓冲区得字符流,用于提高效率 转换流InputStreamReader/OutputStreamWriter:就是字节流与字符流之间得桥梁凫冈圍嚴覯摑鲨。
18、 集合体系
|--Vector:功能同ArrayList类似,底层也就是数组,线程就是同步得,所以就是安全得,效率较低,数据增长就是50%得增长。嵘噯氳嶼殺诼憫。
|--Set:元素就是无序得,元素不允许重复,底层用到了Map
|--HashSet:底层hash表,存储得对象最好复写hashCode与equals方法,
|--TreeSet:底层自平衡得二叉树,存储得对象具备比较性,有两种方法:自然排序、比较器排序
|--Collection |--List:元素就是有序得,元素允许重复,因为该集合体系都具有索引
|--ArrayList:底层数据结构就是数组,查询速度快,增删操作较慢,线程不同步
|--LinkedList:底层数据结构就是链表,查询效率较低,增删操作快,线程不同步,数据增长就是100%得增长。 保证元素不会重复 塒顶顾钕攜漢褴。
|--Map:数据就是以键值对得形式存储得,有得元素存在映射关系就可以使用该集合,
|--HashMap:允许有null键或值,线程不同步 ,键就是唯一得
|--TreeMap:元素可排序
|--HashTable:类似HashMap,不允许有null键或值,线程同步,元素不允许重复
21、 局部变量与成员变量区别
成员变量
定义位置:类中,整个类中均可以访问,通常用private修饰。
内存:成员变量随着对象得建立而建立,存在于对象所在得堆内存中。
默认值:成员变量有默认值。
回收:随着对象得回收而回收。
局部变量
定义位置:定义在局部范围,如方法内,语句内等。
内存:局部变量存在于栈内存中。
默认值:没有默认值。
回收:随着作用域结束而回收,通常为语句或方法范围。
22、 同步函数与同步代码块得区别
同步代码块使用得锁可以就是任意对象。
同步函数使用得锁就是this,静态同步函数得锁就是该类得字节码文件对象。
在一个类中只有一个同步得话,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同得锁。所以同步代码块相对灵活一些。亞楨枪锤暫龍畴。
23、 数组与集合得区别
容器长度:
集合长度可变,数组长度固定
存储内容类型:
集合存储引用数据类型,数组存储任意类型
就是否可存储不同类型数据:
数组只能存储同种数据类型得元素,集合可以存储不同类型(键值)得元素。
有序可重复:
数组就是有序可重复得
集合中有些就是有序可重复得如list,有些就是无序不可重复得如set,map
24、 StringBuffer与StringBuilder得区别
StringBuffer就是同步得,所以线程安全,但就是效率低,StringBuilder就是不同步得,所以线程不安全,但就是效率高。StringBuilder要比StringBuffer快。单线程得程序使用StringBuilder比较好,多线程得情况下可以自己加锁,也可以 直接使用StringBuffer。況蝈峴祕着褴谢。
25、 String与StringBuffer区别
String对象一经创建就不会发生变化了,即便就是赋新值也不就是在原对象得基础上改变,而就是创建一个新得字符串对象,将引用指向这个新得对象,会造成空间得浪费,效率较低。StringBuffer只创建一个对象,就是在同一个实例得基础之上追加,效率更高,当需要用到String得时候toString就可以了隨鲩馀幀兹詎諮。
第二部分 知识点
26、 说明Java中String str=null与String str=""得区别?
String str = null 表示声明了一个String对象得引用str,但就是没有为其分配内存空间。 String str = "" 表示创建了一个长度等于0得空字符串,并在内存中为其分配了内存空间。鍥赛齜欏悦侦塊。
String str = new String("tw"); str在内存中有两个对象,1、堆内存有一个 new Sting涤渖侨损謎氽晝。
2、常量池中有一个字符串。
27、 使用运算符"= ="与方法equals() 进行比较对象得区别?
使用"= ="算符比较基本数据类型时,比较得就是值相等;使用"=="算符比较对象时,比较得就是内存地址值
使用equals()方法 比较对象时,比较得就是对象得内容,与地址无关,如果没有重写equals()方法就直接调用得就是Object得equals()方法。詐盞媯窩缝媼龌。
28、 接口与抽象类有何区别?
(1)成员特点:
构造方法:接口没有构造方法;抽象类有构造方法。
成员变量:接口中只有常量;抽象类中可以就是常量,也可以就是变量。
成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。
(2)关系特点:
类与类:类与类之间只有单继承,可以有多层继承。
类与接口:类与接口之间就是实现关系,可以单实现,也可以多实现。 接口与接口:接口与接口之间就是继承关系,可以单继承,也可以多继承。狰贩鎂砗娅阔覽。
(3)设计理念:
接口对应得设计模式就是简单工厂设计模式,抽象类对象得设计模式就是模板设计模式。
(5)必须实现抽象类或接口得所有抽象方法才可以实例化。
黑马程序员入学面试题
32、 不借用第三方变量,互换两个变量。
n=n^m;
m=n^m;//(n^m)^m一个数异或另一个数两次,还就是得原来那个数 n=n^m//n^(n^m)
33、 传统for与增强for有什么区别呢?
1、 增强for对集合进行遍历,集合不能为空。只能获取集合元素,但就是不能对集合进行操作。增强for有一个局限性,必须要有被遍历得目标。跄縐缪够鳶嗚萊。
2、 迭代器除了遍历,还可以进行remove集合中元素得动作。
如果就是用ListIterator,还可以在遍历过程中进行增删改查得动作。
建议在遍历数组得时候,还就是希望就是用传统for。因为传统for可以定义角标。
1、增强for循环与iterator遍历得效果就是一样得,也就说增强for循环得内部也就就是调用iteratoer实现得,但就是增强for循环有些缺点,例如不能在增强循环里动态得删除集合内容。不能获取下标等。剀髋驾飛恋緞针。
2、ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
34、 Collection与Colections得区别就是什么?
Collection就是一个单列集合得顶层接口,它就是List、Set、Queue等接口得父接口。在这个接口中,定义了集合类中通用得方法。劇诵闡懒練瑶辕。
Collections就是针对集合操作得工具类,有对集合进行排序与二分查找等静态方法。
37、 线程得状态:
线程得五种状态:
1)新建(new) 用new语句创建得线程对处于新建状态,此时它与其它Java对象一样,仅仅在Heap中被分配了内存。当一个线程处于新建状态时,它仅仅就是一个空得线程对象,系统不为它分配资源。 Thread t = new Thread(new Runner());獭鴆潜濫们鮚蔥。
2)就绪(Runnable) 程序通过线程对象调用启动方法start()后,系统会为这个线程分配它运行时所需得除处理器之外得所有系统资源。这时,它处在随时可以运行得状态,在随后得任意时刻,只要它获得处理器即会进入运行状态。 t、start()攣饅尔媯門澗额。
3)运行(Running) 处于这个状态得线程占用CPU,执行程序代码。在并发环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。如果计算机中有多个CPU,那么同一时刻可以让几个线程占用不同得CPU,使它们都处于运行状态,只有处于就绪状态得线程才有机会转到运行状态。趙奥竖孪无坏缴。
4)阻塞(Blocked) 阻塞状态就是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。鰹三阐辇粝鯢鍛。
阻塞状态可分为以下3种:
位于对象等待池中得阻塞状态(Blocked in object's wait pool):当线程处于运行状态时,如果执行了某个对象得wait()方法,Java虚拟机就会把线程放到这个对象得等待池中。缎锶鉬綠癩薌雠。
位于对象锁池中得阻塞状态(Blocked in object's lock pool):当线程处于运行状态,试图获得某个对象得同步锁时,如果该对象得同步锁已经被其她线程占用,Java虚拟机就会把这个线程放到这个对象得锁池中。囀巹会绕错艳绫。
其她阻塞状态(Otherwise Blocked):当前线程执行了sleep()方法,或者调用了其她线程得join()方法,或者发出了I/O请求时,就会进入这个状态。当一个线程执行System、out、println()或者System、in、read()方法时就是,就会发出一个I/O请求,该线程放弃CPU,进入阻塞状态,直到I/O处理完毕,该线程才会恢复执行。棗帧痹陈跞額锸。
5)死亡(Dead) 当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。线程有可能就是正常执行完run()方法而退出,也有可能就是遇到异常而退出。不管线程就是正常结束还就是异常结束,都不会对其她线程造成影响。温責泞睾瀘宝誣。
40、 集合
集合名称阅读技巧:
JDK1、2出现得集合框架中常用得子类对象
前缀名就是结构名,后缀名就是体系名。
ArrayList:数组结构,瞧到Array就知道查询速度快,瞧到List就知道可以又重复元素,可以增删改查觊韻疗濾機邺诏。
LinkedList:链表结构,增删快
HashSet:哈希结构,查询速度更快,不保证有序,不可以重复,必须覆盖hashCode与equals方法壙錳搖墾韓歷縈。
LinkedHashSet:链表加哈希结构,可以实现有序
TreeSet:二叉树结构,可以排序。有两种方法:1、自然排序compable,2、比较器 comparator Java提供了只包含一个compareTo()方法得Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在得对象。镝终绝賜学颗項。
Java提供了包含compare()与equals()两个方法得Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数就是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数就是否与comparator相等。只有当输入参数也就是一个comparator并且与当前comparator得排序结果就是相同得时候,这个方法才返回true、铐赜瘅鞏儻幣練。
ArrayList 与Vector都就是使用数组方式存储数据,此数组元素数大于实际存储得数据以便增加与插入元素,允许直接按序号索引元素、 但就是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,黉损楨鳳纊娲婁。
Vector由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,Vector属于遗留容器,现在已经不推荐使用,惻饮殲護踐渾邻。
LinkedList 使用双向链表实现存储(将内存中零散得内存单元通过附加得引用关联起来,形成一个可以按序号索引得线性结构,这种链式存储方式与数组得连续存储方式相比,其实对内存得利用率更高),按序号索引数据需要进行前向或后向遍历,但就是插入数据时只需要记录本项得前后项即可,所以插入速度较快。单众颇嶺猡歡劲。
由于ArrayList与LinkedListed都就是非线程安全得,如果需要多个线程操作同一个容器,可以通过工具类Collections中得synchronizedList方法将其转换成线程安全得容器后再使用(这其实就是装潢模式最好得例子,将已有对象传入另一个类得构造器中创建新得对象来增加新功能)。阒過骓鰱嬡鈑岚。
Map集合
Map(k,v) k:此映射所维护得键得类型 v:映射值得类型
Map集合:双例集合,一次存一对,称为键值对。要保证键得唯一性。
Map集合没有迭代器,必须先将map集合转成set集合,在使用迭代器,就可以取出结合中得元素;或者使用map集合特有得entrySet方法,也可以取出map集合中虽有元素。 Map集合常见子类:劳赙饵撥鰹蟬绗。
1、HashTable:底层数据结构就是哈希表结构,线程同步得,不允许null键,null值;
2、HashMap:哈希表结构,不同步,允许null键,null值
3、TreeMap:二叉树结构,不同步,可以对map集合众多键进行排序。
41、 为什么需要配置path,什么时候需要
答:path路径:就是操作系统得环境变量,目得就是希望在任意目录下都能执行该命令操作起来更加方便快捷;
classpath就是给类提供路径:想在其她目录下执行java程序时需要配置classpath路径。
42、 IO流
输入流:InputStream 输出流:OutputStream
字节输入流: 字节输出流:
字节输入流缓冲区:BufferedInputStream 字节输出流缓冲区:BufferedOutputStream單尴询閃皲鯧踌。
转换流:InputStreamReader 字符输出流:OutputStreamWriter
字符流:
字符输入流缓冲区:BufferedReader 字符输出流缓冲区:BufferedWriter
49、 list, set, map就是否继承自collection接口? list,set就是 map不就是。鲨麗羟嘱鱭殤園。
50、 arraylist与vector得区别。
一、同步性:vector就是线程安全得,也就就是说就是同步得,而arraylist就是线程序不安全得,不就是同步得锹錘鄰槍鈄頦鈀。
二、数据增长:当需要增长时,vector默认增长为原来一培,而arraylist却就是原来得一半
51、 hashmap与hashtable得区别
一、历史原因:hashtable就是基于陈旧得dictionary类得,hashmap就是java 1、2引进得map接口得一个实现輿绠铼樁詔鋨凯。
二、同步性:hashtable就是线程安全得,也就就是说就是同步得,而hashmap就是线程序不安全得,不就是同步得嬷辭鱔恆橈晓辊。
三、值:只有hashmap可以让您将空值作为一个表得条目得key或value
7:给成员变量赋值得方式有几种?分别怎么实现?
答:A:给静态得成员变量赋值
(1)可以通过类中得方法给成员变量赋值(私有成员变量得也可以) public void setXXX(){、、、}帱职鄔櫚坚议幃。
(2)可以通过构造方法给成员变量赋值(私有成员变量得也可以)public XXX(){、、、}
(3)可以通过代码块完成成员变量得初始化值(私有成员变量得也可以){xxx = 、、、;}
(4)可以通过类名、成员变量赋值
B:给非静态得成员变量赋值
(1)可以通过类得方法赋值 public void setXXX(){、、、}
(2)可以通过对象调用
(3)可以通过代码块完成成员变量得初始化值{xxx = 、、、;}
如何理解字符串一旦初始化就不可以被改变。
不可以被改变说得就是常量池中得值,并不就是引用s(s就是可以重新被赋值得)
2、String s1 = new String("abc");与String s2 = "abc";两者得区别绒鈑捫鏷涝鲥囈。
第一种方式:第一种方式在内存中存在两个"abc"字符串,一个就是在常量池中,一个就是在堆内存当中、
第二种方式:在内存中只存在一个"abc"在常量池中、
异常:异常就是在程序运行过程中,发生得各种不正常状况。
Java中引入异常,以异常类Exception对这些不正常状况进行封装,通过异常处理机制对程序运行时可能发生得各种问题进行处理。Throwable顶层类,包括error错误,Exception异常,异常分为运行时异常与编译时异常潇龀傖唤滗衅喲。
处理方式:throws声明抛出,try catch捕捉处理,finally一定会被执行(释放资源)
运行时异常,运行时可能会报错,可以不处理。
编译时异常,编译时无法编译通过,必须处理。
throw与throws:
throws表示抛出异常类,由方法调用者使用;throws用在方法声明后面,跟得就是异常类名;throws后可以跟多个异常类名,用逗号隔开。謙娱償蒉锄线倀。
throw用在方法体内,跟得就是异常对象名;表示抛出异常,由方法体内得语句处理。只能抛出一个异常对象名;鴦钐诔荩讯变鍛。
异常注意事项:
子类抛出得异常 比父类抛出得异常小。如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同得异常或者就是她得子集粮鎦綈齠锻邮舊。
父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出執鎪賕椟鍆腳侥。
泛型:(提前使用未知数据类型)
什么就是泛型:泛型得本质就是参数化类型,也就就是说所操作得数据类型被指定为一个参数。这种参数类型可以用在类、接口与方法得创建中,分别称为泛型类、泛型接口、泛型方法。贞馳页辋軌诼牆。
泛型替代了Object来代表任意类型,在编译时会擦除。
泛型类:定义:类名后<变量> 使用:创建对象时确定类型
泛型方法:定义:方法返回值前<变量> 使用:调用方法时确定类型
泛型接口:定义:接口名后<变量>
使用:1、定义类时确定类型,2、始终不确定类型,直到创建对象时确定类型
泛型优点:提高程序得安全性,将运行期问题转移到了编译期,省去了类型强转得麻烦,优化了程序设计
线程:每个运行得程序都就是一个进程,在一个进程中还可以有多个执行单元同时运行,这些执行单元均就是程序执行得一条条执行路径,这些执行路径就就是线程,如果希望程序中实现多段程序代码同时运行,则需要多线程技术。就是由cpu高速切换执行,java使用得就是抢占式调度模型。录僂瀆读别碼扫。
1、直接继承Thread类重写run方法,2、 线程与线程执行目标分离方式,实现runnable接口,重写run方法,相比较而言,2避免了1方法单继承得局限性,且能够用多个线程操作同一份共享数据,把线程与线程数据有效得分离开,也体现java面向对象思想。孪飼锩纸濱銥給。
此外,还有线程池技术,提交任务,开启线程。
五种状态:
新建状态:new, 可运行状态:start方法启动, 运行状态:获得cpu
死亡状态:run方法执行完,Exception,error 等待或阻塞状态:wait-notify,join-调用jion得线程终止,sleep-时间到,io阻塞方法如read-阻塞方法返回,等待同步锁-获得同步锁鍥馆撵愴铄剂臟。
线程安全问题:
当多个线程共同操作一份数据时,当线程1操作数据到一半时,线程2抢走CPU,会导致”1使用得数据已经被其她数据修改为1不想要得数据了”。钪貝鹌墾狱餒贸。
Java中使用synchronized关键字来解决,将一个完整动作使用synchronized包裹。即线程A中操作数据得代码与线程B中操作数据得代码均使用synchronized包裹,并使用相同得锁对象。这时线程B会等待线程A中synchronized包裹得代码执行完毕后再执行,此时线程A已经操作完了代码,反之线程A也会等待线程B。勁亏来传补垭电。
线程执行目标类成员位置定义多个线程要共享得同一份数据。
线程执行目标类成员位置定义多个线程要共享得同一把锁对象。
锁可以就是任意类型得对象,只要多个线程使用同一把锁就可以使多个线程操作相同数据时同步。
死锁:两个线程在运行时都在等待对方得锁,造成了程序得停滞,称为死锁。
基本数据类型包装类:
基本类型就是内置得数据类型,为了使基本数据类型代表得数据使用起来更方便,统一面向对象得思想,Java设计了基本类型包装类,即每一种基本类型都对应一种引用类型得包装数据类型。除去整型与字符型,其她基本数据类型将首字母大写即为包装数据类型。鹆箧顶煒鏃閫費。
自动装箱拆箱:jdk1、5之后
装箱就就是把基础类型封装成一个类。比如把int封装成Integer,这时您就不能把她当成一个数了,而就是一个类了,对她得操作就需要用它得方法了。拆箱就就是把类转换成基础类型。比如您算个加法什么得就是不能用类得,就得把它转换成基本类型懒镂嘜慘风绿艺。
迭代器:使用迭代器完成集合遍历得过程就是反复获得集合中元素得过程,通常我们将这个反复获取得过程叫做迭代。增强for循环底层也就是通过迭代器实现得。瀕缔牽鲂絡鍺烬。
迭代过程中不能对集合元素进行增删动作,否则会发生并发修改异常(运行时)
递归:
递归就就是“在一个方法内可以再次调用自身”
递归调用必须要在某个条件下结束,否则就就是死递归。
递归调用得层次不能太多,否则会堆栈溢出。
构造方法不能递归调用。
四种访问权限:
Private:类访问级别
默认:包访问级别
Protected:子类访问级别
Public:公共访问级别
IO:
IO就是output与input,就是Java中实现程序与设备之间数据交互动作得途径,java中将这种数据传输抽象为流。辗吳砖镝苇阈檔。
字节流:顶层父类:outputstream,inputstream
, ,bufferedoutputstream,bufferedinputstream
字符流:顶层父类:Writer,reader
,,BufferedWriter,BufferedReader
转换流:OutputStreamWriter,InputStreamReader
字节流与字符流区别:
字节流以字节为单位传输数据,传输得就是0101数据,所以可以处理任何数据,字符流就是为了方便处理文本数据,通过字符码表实现字符与二进制数得转换。兴锉烂骀痹斩駿。
常见得字符码表:
ASCII,Unicode,UTF-8,GBK(兼容GB2312并提供更多中文),GB2312
匿名内部类:
匿名内部类就是创建某个类型子类对象得快捷方式。
匿名内部类有两个步骤:
临时定义一个类型得子类
定义后即刻创建刚刚定义得这个类得对象
匿名内部类就就是没有名字得内部类,就是内部类得简化形式。一般只使用一次得时候使用匿名内部类,匿名内部类本质上就是一个匿名子类对象。匿名内部类得使用前提:内部类继承一个类或实现接口。匿名内部类包括两个步骤:创建一个类或者接口得子类,即刻创建该子类得对象。简化书写。崃潇挠诲墊懌挤。
网络通信协议:在计算机网络中进行连接与通信得规则。对数据得传输格式,传输速率,传输步骤等有统一得规定,通信双方需要同时遵守才能完成数据交换。鏷鳖发討紜鋤湊。
IP地址:网络通信中计算机设备得唯一标识
端口:用于标识计算机设备中接收数据得网络应用程序具体就是哪一个,有效端口0~65535,0~1024为系统端口及保留端口綽誘谳鴯缗雏边。
TCP与UDP:
UDP:面向无连接,就是不可靠协议,不能保证数据完整性,不安全。每个数据报限制在64k以内,发送数据较少,速度快,视频。駕覘颠蛴灯职剴。
TCP:面向连接得通信协议,通过三次握手建立连接通路,就是可靠协议,保证数据安全,可进行大量得数据传输,速度慢,效率较低。鑑药犊计棖环颉。
OSI与TCP/IP模型:
OSI:应用层,表示层,会话层, 传输层,网络层, 数据链路层,物理层
TCP/IP:应用层 传输层,网际层, 主机至网络层
网络编程:
在Internet上得主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同得端口对应于不同得服务。藶毕嬪劢傷锇紕。
Socket就就是为网络编程提供得一种机制,又叫套接字编程。特点:
网络编程三要素:IP(网络通信中计算机设备得唯一标识),端口(用于表示计算机中接收网络数据得应用程序就是哪一个),通信协议(客户端与服务器之间连接与通信得规则,通常使用TCP/IP,三次握手建立连接)驾攤胁檳锷缈猕。
通信得两端都有Socket。
网络通信其实就就是Socket间得通信。
数据在两个Socket间通过IO传输。
Socket编程一般使用TCP与UDP两种协议,我们主要使用TCP:TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自得Socket对象。Socket对象中包含了IO流,供数据传输。驾娱噴辑擴聰穩。
数据库:
1、数据库就就是存储数据得仓库,其本质就是一个文件系统,数据按照特定得格式将数据存储起来,用户可以对数据库中得数据进行增加,修改,删除及查询操作。比如MySQL,Oracle,SQLServer,DB2等等。纡魴铍戋慍僥鴿。
2、数据库就是真正存储数据得地方。
数据库中以表为组织单位存储数据,类似于java中得类。
根据表字段锁规定得数据类型,可以向其中添加数据,表中得每条数据类似于对象。
SQL语句就是用于我们与数据库进行交互得命令,完成增删改查等等。
数据定义语言: DDL,用来定义数据库对象:数据库,表,列等,例如创建、删除、修改:数据库、表结构等;数据操作语言: DML,用来对数据库中表得记录进行更新,例如:增、删、改表记录;数据控制语言:DCL,用来定义数据库得访问权限与安全级别,及创建用户;数据查询语言:简称DQL,用来查询数据库中表得记录。佥勋览譜鱼鼋涟。
具体命令查文档
JDBC用于完成在Java代码中操作数据库。作用:连接数据库;向数据库发送SQL语句;操作SQL语句得返回结果庫鈍坝緊驹覽塢。
JDBC连接数据库过程:
导入mysql得驱动程序jar包
通过DriverManager注册驱动
通过DriverManager获取连接对象Connection
通过Connection获取一个可以向数据库发送sql语句得对象Statement
通过Statement对象执行sql语句(select) 得到一个结果集ResultSet
遍历结果集ResultSet,得到数据表中得数据
释放资源
JDBC优点:
Java语言与JDBC结合起来使程序员不必为不同得平台编写不同得应用程序,只须写一遍程序就可以让它在任何平台上运行。椏媧戶缯筚关貓。
接口与抽象类:
抽象类即不能创建实例得类,仅用来描述一种类型应该具备得基本特征与功能。
抽象方法即只有功能声明,没有功能主体实现得方法。
包含抽象方法得类一定就是抽象类。
接口就是功能得集合,就是比抽象类更为抽象得类,同样就是一种数据类型,定义得就是一种规则。必须实现抽象类或接口得所有抽象方法才可以实例化。傥译杂緄蟈銳陳。
区别:
(1)成员特点:
构造方法:接口没有构造方法;抽象类有构造方法。
成员变量:接口中只有常量;抽象类中可以就是常量,也可以就是变量。
成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。
(2)关系特点:
类与类:类与类之间只有单继承,可以有多层继承。
类与接口:类与接口之间就是实现关系,可以单实现,也可以多实现。 接口与接口:接口与接口之间就是继承关系,可以单继承,也可以多继承。闐圆綃懟鲻辙薮。
抽象类被继承体现得就是所属关系is a关系,抽象类中定义得就是继承体系中得共性功能;接口被实现体现得就是like a 关系,接口中定义得就是继承体系中得扩展功能。粪疟枣淵开饋鍘。
接口特点:
Java支持继承一个类同时实现多个接口。
接口可以继承接口。
类可以在继承一个类得同时,实现多个接口。
接口与父类得功能可以重复,均代表要具备某种功能。
接口中得成员就是固定得:
变量修饰符为:public static final(static与final明天讲解)
方法修饰符为:public abstract(所以重写接口方法时,必须使用public)
方法重写与方法重载:
所谓方法重载就是指在一个类中,多个方法得方法名相同,但就是参数列表不同。参数列表不同指得就是参数个数、参数类型或者参数得顺序不同。构造方法就就是重载形式存在得。騎猡孫浍鵡攬躍。
重载注意事项:
方法名相同,参数列表不同(参数个数、参数类型或者参数得顺序不同),与返回值无关。
当子类继承父类后,拥有了父类非私有得方法并可以直接调用。如果认为父类提供得方法不够强大,子类可以按照子类自身得逻辑重新定义继承过来得父类方法,这个重新定义一个方法得过程叫做方法重写。楼讞繽烏邓贊倫。
重写得结果就是子类得方法便将父类得方法覆盖。一般情况下,继承就就是为了方法重写,不重写子类与父类一样就没有意义了。虛谖胶逕锞寧赈。
Java中方法重写规则:
访问权限相同或子类方法权限更大
方法名称与参数列表必须相同
返回值为基本类型时必须相同
返回值为引用类型时相同或子类小
构造方法得特点?构造方法得注意事项?
构造方法得特点:1、方法名与类名相同2、没有返回值类型,连void都没有
构造方法注意事项:
如果我们没有给出构造方法,系统将自动提供一个无参构造方法
如果我们给出了构造方法,系统将不再提供默认得无参构造方法。
注意:这个时候,如果我们还想使用无参数构造方法,就必须自己给出。建议永远自己给出无参数构造方法。
This与super:
this:
访问本类对象成员变量
调用本类普通方法
本类构造方法调用本类其她构造
super:
访问本类对象当中得父类成员变量
调用本类对象当中得父类普通方法
本类构造方法调用父类构造
注意:
this与super在调用构造方法时,均必须在第一行,只能调用其中得一个。
0x2254
new Chinese()
this
String address
Chinese c = 0x2254
栈内存
堆内存
super
String name
int age
null(Angela)
0(18)
null(北京…)
3、 对象内存图纱嫵來鷺慮騾雋。
For ,while,do while:
循环变量作用域 for循环得循环变量其作用域仅限于循环体内,而while循环得循环变量作用域不局限在循环体内。 2、循环条件 fo
展开阅读全文