Java学习--总结

来源:互联网 发布:java ftp上传附件 编辑:程序博客网 时间:2024/05/29 07:06

直至昨天,终于在磕磕绊绊中把Java学完了。也算是鸟了自己多年来一直想学习Java的一个心愿。

不过也只是把Java的基础知识学完,现在趁着周末这两天,把Java的基础知识回顾一下,顺便把代码敲敲,算是对前期学习的一个总结和复习,对后续学习的一个准备。


第一部分  基础知识(嘿嘿,你懂得!)

第二部分  面向对象

1、封装

类 :对一类事物抽象得到的一个概念。
对象:一个具体的事物。

构造函数:
1)不能有返回值;
2)方法名与类名相同;
3)可以有多个;
4)默认生成无参无方法体无返回值的构造函数;
5)一旦自己定义,编译器不再生成默认的构造函数;
6)生成一个类对象时,能且只能调用其中的一个构造函数。

static:

凡是static修饰的成员都是静态成员,静态成员都是属于类的;
1)非静态的可以访问静态的,静态的不可以访问非静态的;
2)通过类名只能访问一个类中的非私有静态成员;
3)私有静态成员也不可以通过对象名访问。

this:
1)非静态方法默认都含有一个this指针;
2)this代表正在调用本方法的对象;
final:
1)修饰类:该类不能被继承;
2)修饰方法:该方法可以被继承,但不能被重写;
3)修饰属性:该方法只能被赋值一次,赋值方式有两种(见NO.1和NO.2),且只能选择其中一种:

          NO.1 定义的同时显示地初始化:private final int i = 10;

          NO.2 在构造函数中完成初始化;

          NO.3 错误写法:private final int i = 10;因为这代表赋值两次!!
4)修饰局部变量:用的少。
函数重载:
1)同名不同参;
2)返回值不能作为是否构成函数重载的依据。

2、继承

定义:子类继承了父类的成员
注意的问题:
1)非私有成员才可以被子类继承;
2)重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型!三者缺一不可;
3)重写方法的访问权限不能小于被重写方法,若变小了,多态无法实现。

3、多态

定义:父类的引用根据当前时刻所指向的不同,自动调用不同对象里的方法,父类的引用可以指向父类对象,也可以指向子类对象。
能达到的效果是:同一代码可以随上下文的不同而执行不同的操作,俗称多态。
注意事项:

1)通过父类的引用不能访问子类特有的成员,只能访问子类从父类继承过来的成员,包括属性和方法。
比如:A是父类,B是子类,f()是父类的方法,g()是子类特有的方法,aa可以调用f(),但不能调用g(),

           A  aa = new B();
           aa.f();
           aa.g() ;//错误!
2)只有在父类的引用本身指向的就是一个子类对象时,才可以把父类的引用强制转化为子类的引用。 
比如:A是父类,B是子类,
           A  aa = new B();      
           B  bb = new B();
           aa = bb;//(正确,把子类当作父类使用,比如,猫是动物的子类,我们可以说把猫当作动物)
           //bb = aa;(错误,不能把父类当作子类使用,不可以说把动物当作猫!),但是我们可以在某种情况下进行如下的强制转换,把父类转化为子类:
           bb = (B)aa; //(只有当父类已经指向了子类才可以这么做,也就是前面的”aa=bb”,如果没有这一句就不对了!)                      
相关知识:
抽象类:
1) 一个抽象类通常都含有抽象方法,也可以不含有抽象方法(木有什么意义);
2)只重写了抽象类的部分抽象方法的类必须被标记为abstract(即:仍然是抽象类);
3)不可以定义抽象类对象(即:不能new出一个对象),但是抽象类可以实现多态(即:抽象类子类的对象可以发送给抽象类的引用)。
接口:
1)接口中的方法都是public abstract;
2)不可以定义接口对象,但接口可以实现多态(即:把一个实现了接口的对象发送给接口的引用);
3)重写接口方法时,public不能省,否则会出错;
4)举例:线程的创建
                事件的处理:定义监听器需要实现某个接口
                容器的组织方式:容器以connection的set,list等这些接口组织在一起的。
                serializable接口:这是一个空接口,表明对象可以序列化。

第三部分:高级部分

1、异常

定义:运行时的错误
分类:无法处理的错误和可以处理的异常
可以处理的异常:分为必须处理的异常和可处理可不处理的异常。
               必须处理的异常:是Exception子类但不是RuntimeException的子类
               可处理可不处理的异常:是RuntimeException的子类。
注意问题:

1)finally{...}的代码一定会执行,为下面的程序提供一个统一的接口;
2)B是A类的子类,C是B的子类,那么应先捕获C的异常。也就是先捕获子类异常,再捕获父类异常。
3)重写方法抛出异常的范围不能大于被重写方法抛出异常的范围,否则多态无法实现。
4)假设f方法抛出A异常,则f方法有两种方式处理A异常:
               方式一:throws A
               方式二:try{...}catch{...}

2、线程

定义:一个程序运行时的不同执行路径。
创建线程的方式:
              方式一:继承Thread类
              方式二:实现Runnable接口(常用)
线程的同步:
1)多个线程操作同一资源,并且要求这些操作中的若干个操作不能被中断,这时需要考虑线程同步的问题。
2)线程同步是通过synchronized来实现,synchronized可以修饰两种:
     代码块
     方法(默认锁定的是this)

示例:卖票
线程的通信:
有时多个线程只有彼此相互写作才能完成某个功能,这时就需要线程的通信。
实现方式: wait和notify()/notifyAll()
示例:生产和消费(重要,难!)

3、包

包的生成与运行:
1)package语句必须是第一条语句;
2)类名必须是包名和类名的组合;
3)只有在整个包的最上层目录才可以运行。
同包:只有私有的不能访问。
不同包的相互访问:只有公有的类可以被另外一个类访问,只有公有的类可以被另外一个包中的类继承(子类的内部访问,子类通过它的对象名访问,如一个包中有一个A类,一个包中有一个B类,那B类是否可以把A当作父类,若可以,B内部是否可以访问A内部的成员,若B内部可以访问那通过B的对象是否可以访问,这些问题都可以仔细研究,在后面的复习文章中会具体分析到。)
jar包的生成与jar包的使用:
1)普通jar包的生成:
jar-cvf  要生成的jar包的名字.jar *(把什么文件打包,进入当前文件夹,使用这个命令)
2)可运行jar包的生成:
jar cvfm 要生成的jar包的名字.jar 1.txt *(1.txt再指定下)

4、GUI

容器和组件的关系:
容器是组件,但组件不一定是容器。
常见的布局管理器:
 BorderLayout--Frame
 FlowLayout--Panel
 GridLayout
事件模型:
必须明白哪些操作是编译器自动完成的,哪些操作是程序员手动处理的。比如有一个按钮,点击一下,通常只需要:告诉按钮可以产生点击操作(注册一个监听器),设计可以监听此事件的类。
程序员只需要做两件事情:
1)告诉事件源可以产生哪些事件;
2)设计好可以处理这些事件的事件监听器。
内部类:
1)在一个类内部定义的类叫内部类;
2)内部类的方法可以访问外部类的所有成员;
3)外部类的方法不可以直接访问内部类的任何成员。
产生内部类的原因:
1)如果一个A类要使用B类的所有成员,并且A类不需要被除B以外的其他类访问,则可以把A定义为B的内部类;
2)几乎不存在直接生成内部类对象的问题,也不存在外部类需要访问内部类成员的问题。
匿名类:
1)匿名类是内部类的一种极端表现形式;
2)匿名类可以访问外部类的所有成员和包裹本匿名类方法中的final类型的局部变量。

5、IO

定义:如果一个类是用来完成程序和设备之间的数据传输,则这个类有一个特殊的称谓叫流。
流一定是类,类不一定是流。
分类:
输入流,输出流
字节流,字符流
原始流,包裹流
常用流的介绍:
四大基本抽象流:
InputStream,OutputStream
Reader,Writer
字节流和字符流的区别:
字节流可以处理所有格式的文件,字符流只能处理文本格式的文件。
文件流:
FileInputStream,FileOutputStream
FileReader,FileWriter
缓冲流:
BufferedInputStream,BufferedOutputStream
BufferedReader,BufferedWriter
缓冲流可以提高数据传输的速度
转化流: 
OutputStreamWriter,InputStreamReader
例子:如何将键盘上的字符组成字符串赋给String对象或者说编程实现把用户从键盘输入的字符保存到一个String对象中。
数据流:
DataInputStream,DataOutputStream
数据流可以把基本类型数据的二进制直接读入或写出。
例子:编程实现将long类型数据写入byte数组,再从byte数组中把该数据读出。
Print流:
PrintStream,PrintWriter(这两个方法不抛异常)
Print流可以把基本类型数据格式化后的字符串输出。
例子:编程实现把键盘输入的数据写入A文件,如果输入有误,则把出错信息写入B文件
Object流:
ObjectInputStream ObjectOutputStream
Object流可以把一个对象直接写入或读出。

6、容器

定义:如果一个类是专门用来存放其他类对象的,则这个类有另外一个特殊的词叫做容器。
容器和类的关系:容器一定是类,但类不一定是容器。
collection接口:
           Set接口:无序不允许重复
                  实现类:TreeSet,HashSet
           List接口:有序允许重复
                  实现类:ArrayList,LinkedList
Map接口:
          定义:既保存数据本身,也保存数据的主键的一种接口
          实现类:HashMap,TreeMap
hashCode()和equals()方法:以Hash开头的都必须重写这两个方法。
Collections类:提供了对Collection接口实现类的排序、倒置、查找等功能。
Comparable接口:通过该接口的方法可以制定出对象之间比较的标准,凡是需要进行对象的比较排序的场合均可以考虑实现该接口。
Iterator接口:利用该接口提供的方法可以遍历所有容器中的元素。  
              
                   






              




0 0