JAVA 入门关键点(一)
设计模式:
模式帮助我们记录和交流已被证实了的解决方案
总体来说设计模式分为三大类:
(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
(2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
(3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
常用的模式:贫血模式、数据驱动模式、驱动领域设计模式。
J2EE层次模型化,5个层次:客户层、表示层、业务层、集成层、资源层。
表示层 | 业务层 | 集成层 |
---|---|---|
截取过滤器 | 业务代表 | 数访问对象 |
前端控制器 | 值对象 | 服务激发器 |
视图助手 | 会话外观 | |
复合视图 | 复合实体 | |
工作者服务 | 值对象组装器 | |
发布者视图 | 值列表处理器 | |
服务定位器 |
语法基础:
在类层次结构中,构造函数以派生的次序调用,从超类到子类。
超类的引用变量可以引用子类对象。Java用这一事实来解决在运行期间对重载方法的调用。
重载方法允许Java支持运行时多态性。
抽象类没有对象。也就是说,一个抽象类不能通过new操作符直接实例化。你不能定义抽象构造函数或抽象静态方法。
Final关键字有三个用途。
1.它可以用来创建一个已命名常量的等价物。Final的其他两个用法是应用于继承的,
2.使用final阻止重载
3.使用final阻止继承
Java在运行时动态的调用方法,这叫做后期绑定(late binding)。然而既然final方法不能被重载,对方法的调用可以在编译时解决,这叫做早期绑定(early binding)。
声明一个既是abstract的又是final的类是不合法的,因为抽象类本身是不完整的,它依靠它的子类提供完整的实现。
Super的两种用法:
1.子类可以调用超类中定义的构造函数方法,用super的下面形式:super(parameter-list)
2.Super的第2种形式多数是用于超类成员名被子类中同样的成员名隐藏的情况super.member
任何声明为public的内容可以被从任何地方访问。被声明成private的成员不能被该类外看到。如果一个成员不含有一个明确的访问说明,它对于子类或该包中的其他类是可见的。默认型的只能允许类中或包中的代码访问。如果你希望一个元素在当前包外可见,但仅仅是元素所在类的子类直接可见,把元素定义成protected。
通过提供interface关键字,Java允许你充分利用多态性的“一个接口,多个方法。
当实现一个接口方法时,它必须声明成public。
任何实现接口的类必须实现该接口定义的所有方法,包括从其他接口继承的任何方法。
Java的多线程系统建立于Thread类,它的方法,它的共伴接口Runnable基础上。
线程Thread[MyThread,5,main] 显示顺序:线程名称,优先级以及组的名称。
Java有两种创建子线程的方法
1.class NewThread implements Runnable (常用,不重载Thread的其他方法时,最好只实现Runnable接口)
2.class NewThread extends Thread
线程同步,关键是管程(也叫信号量semaphore)。管程是一个互斥独占锁定的对象,或称互斥体(mutex)。在给定的时间,仅有一个线程可以获得管程。当一个线程需要锁定,它必须进入管程进入某一对象的管程,就是调用被synchronized关键字修饰的方法。
为了退出管程,并放弃对对象的控制权给其他等待的线程,拥有管程的线程仅需从同步方法中返回。
1. class fucntion {
synchronized void fucntion(String msg) {
...}}
2. synchronized(object) { }
Java包含了通过wait( ),notify( )和notifyAll( )方法实现的一个进程间通信机制。这些方法在对象中是用final方法实现的,所以所有的类都含有它们,这三个方法仅在synchronized方法中才能被调用。
· wait( ) 告知被调用的线程放弃管程进入睡眠直到其他线程进入相同管程并且调用notify( )。
· notify( ) 恢复相同对象中第一个调用 wait( ) 的线程。
· notifyAll( ) 恢复相同对象中所有调用 wait( ) 的线程。具有最高优先级的线程最先运行。
程序可以用throw语句引发明确的异常。程序执行在throw语句之后立即停止。
一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句。
用多catch语句时,记住异常子类必须在它们任何父类之前使用是很重要的。这是因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,如果子类在父类后面,子类将永远不会到达。
有两种可以获得Throwable对象的方法:在catch子句中使用参数或者用new操作符创建。
字节流类
字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这子类对不同的外设进行处理。
字符流类
字符流类由两个类层次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。
在Java中,所有的文件都是字节形式的,最常用的流类是FileInputStream和FileOutputStream
FileInputStream(String fileName) throws FileNotFoundException
FileOutputStream(String fileName) throws FileNotFoundException
方法 read( ) write( ) close( )
object instanceof type,。如果object是指定的类型或者可以被强制转换成指定类型,instanceof将它评估成true,若不是,则结果为false。
Java中给静态方法添加泛型(static <T>)
Public static<T> Function<T> getxxx(){return null;}