自己当初在学习java的时候做的一些记录
Java程序员发展路线
高级特性
反射、泛型、注释符、自动装箱和拆箱、枚举类、可变
参数、可变返回类型、增强循环、静态导入
核心编程
IO、多线程、实体类、
集合类、正则表达式、
XML和属性文件
图形编程
AWT(Java2D/JavaSound/JMF)、Swing、SWT、JFace
网路编程
Applet、Socket/TCP/UDP、NIO、RMI、CORBA
Java语法基础
类、抽象类、接口、最终类、静态类、匿名类、内部类、异常类、编码规范
Java开发环境
JDK、JVM、Eclipse、Linux
Java核心编程技术
Java,设计而又非常精巧的语言。学习Java,须从Java开发环境开始,到Java语法,再到Java的核心API。
1.Java开发入门:Java开发环境的安装与使用,包括JDK命令、EclipseIDE、Linux下Java程序的开发和部署等。
2.Java语法基础:基于JDK和Eclipse环境,进行Java核心功能开发,掌握Java面向对象的语法构成,包括类、抽象类、接口、最终类、静态类、匿名类、内部类、异常的编写。
3.Java核心API:基于JDK提供的类库,掌握三大核心功能:
A。Java核心编程:包括Java编程的两大核心功能——Java输入/输出流和多线程,以及常用的辅助类库——实体类、集合类、正则表达式、XML和属性文件。
B。Java图形编程:包括Sun的GUI库AWT(Java2D、JavaSound、JMF)和Swing,IBM和GUI库SWT和Jface;
C. Java网路编程:Applet组件编程,Socket编程,NIO非阻塞Socket编程、RMI和CORBA分布式开发。
4.Java高级特性:掌握JDK1.4、JDK5.0、JDK6.0中的Java高级特性,包括反射、泛型、注释,以及java高级特性——自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入等。
JavaEE初级软件工程师
JSF框架开发技术
配置文件(页面导航、后台Bean)、JSF组件库(JSF EL语言、HTML标签、事件处理、)、JSF核心库(格式转换、输入验证、国际化)
Javaweb核心开发技术
开发环境(Eclipse、Linux)
三大组件(JSP、JavaBean、Servlet)
扩展技术(EL、JSTL、Taglib)
网页开发技术
HTML、XML、CSS、JavaScript、AJAX
数据库设计技术
SQL、MySql、Oracle、SQLServer、JDBC
Web服务器(Tomcat/Jetty/Resin/JBossWeb)
JavaWeb核心技术:
JavaWeb项目开发的全过程可以分解为:
网页开发+数据库设计——>JavaWeb项目开发,其中,javaWeb由6项基本技术组成:JSP+JavaBean+Servlet+EL+JSTL+Taglib,而JSF正是将这6种技术进行有机结合的技术框架:
JavaEE中级软件工程师
四种经典架构SSH1、SSI1、SSH2、SSI2
Struts1表现层框架
入门配置、核心组件、标签库、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS
Struts2表现层框架
入门配置、核心组件、标签库、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS
Spring业务层框架
入门配置、IoC容器、MVC、标签库、国际化、数据校验、数据库开发
Hibernate持久层框架
MySQL、Oracle、SQLServer iBATIS持久层框架
MySQL、Oracle、SQLServer
Web服务器(Tomcat/Jetty/Resin/JBossWeb)
Java高级软件工程师
javaWeb开源技术与框架
工作流、
规则引擎
搜索引擎、
缓存引擎 、
任务调度、
身份认证
报表服务、
系统测试、
集群、
负载平衡、
故障转移
JavaWeb分布式开发技术
JTA(Java事物管理)
JAAS(Java验证和授权服务)
JNDI(Java命名和目录服务)
JavaMail(Java邮件服务)
JMS(java信息服务)
WebService(web服务)
JCA(java连接体系)
JMS(java管理体系)
应用服务器(JBossAS/WebLogic/WebSphere)
JavaEE系统架构师
面向云架构(COA)
COA、SaaS、网格计算、集群计算、分布式计算、云计算
面向资源架构(ROA)
ROA、RESI
面向web服务架构(SOA)
WebService、SOA、SCA、ESB、OSGI、EAI
Java设计模式
创建式模式:抽象工厂/建造者/工厂方法/原型/单例
构造型模式:适配器/桥接/组合/装饰/外观/享元/代理
行为型模式:责任链/命令/解释器/迭代子/中介者/备忘录/观察者/状态/策略/模板方法/访问者
Java与UML建模
对象图、用例图、组件图、部署图、序列图、交互图、活动图、正向工程与逆向工程
java api网址:http://docs.oracle.com/javase/6/docs/api/index.html
- java使用extends表示继承,而且java中只存在公有继承。
- 当子类和父类有相同的方法名时,通过super.方法名 来调用父类的方法。
- 在子类的构造中,要调用父类的构造,super(var1,var2,...);这样就可以了调用父类的构造了。
- 当需要阻止人们利用某个类来定义子类的时候,就用final修饰这个类。
- java的抽象类用abstract修饰
- java的抽象类可以包含具体的方法,尽量将通用的变量和方法放在抽象类中。java的抽象类也不能被实例化。
- java中的protected方法对本包和所有子类可见,这与C++稍微不同。
- java中的Object类是所有类的超类(父类),Object类中有一个equals方法用于检测一个对象是否等于另外一个对象。
- StringTokenizer 将符合一定格式的字符串拆分开,也就是解析
- 初始化字符串对象,尽量不用构造方法,而是直接初始化,这样效率更高。String good = "Yet another string object"
- 避免创建无用对象,因为创建和初始化对象时很耗费资源的。
- 不到万不得已,不要使用Math.pow()方法,因为当指数是小数的时候,该方法会比直接使用乘积慢300-600倍左右。
- 使用equals而非 ==
- 不到万不得已,不要使用Math.pow,因为当指数是小数的时候,Math.pow要比乘积慢300-600倍。
- Java提供了Runtime类来执行shell命令。由于这些是外部的命令,因此异常处理就显得异常重要。
- 在Java中发送邮件也很简单。你只需装一下Java Mail这个jar包,放到你的类路径里即可。
- 将表格导出成pdf也是一个比较常见的需求。通过itextpdf,导出pdf也不是什么难事。
- (1)currentTimeMillis():返回当前时间自新纪元时间以来的毫秒值,long类型。例子:
long startTime = System.currentTimeMillis();
long estimatedTime = System.currentTimeMillis() - startTime;
(2)nanoTime():返回系统计时器当前的精确时间,纳秒值,这也是long类型。nanoTime()主要是用于计算相对时间而非绝对时间。
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
19.(1)修饰类:当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
(2)修饰方法:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。类的private方法被隐式的转化为final方法。
(3)修饰变量:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
20.synchronized关键字:当用这个关键字修饰方法或者代码块的时候,能够保证在同一个时刻最多只有一个线程执行该段代码。
21.abstract 抽象的,可以修饰类和方法
(1)修饰类:为抽象类,必须被继承使用,不能创建对象,Abstract可以将子类的共性最大限度的抽象出来,放在父类中,以提高程序的简洁性。
(2)修饰方法:只有声明,没有实现,需要子类覆盖,例如:Abstract void print();
22.java中的static
(1)static方法(变量)就是没有this的方法,可以在没有对象的前提下,仅仅通过类本身来调用static方法,这也是static的主要用途。
23.加public表示全局类,该类可以import到任何类内
不加public默认为保留类,只能被同一个包内的其他类引用。
24.java中的单例模式——一个类只有一个实例
(1)懒汉模式,线程不安全
public class Single {
private static Single instance;
public static Single getInstance() {
if (instance == null) {
instance = new Single();
}
return instance;
}
private Single() {}
}
当多个线程同时访问这个类时,上面的程序就可能产生不止一个实例,所以此时需要线程锁来解决。
(2)懒汉模式,线程安全
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static synchronized Singleton getInstance(){ if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
这种写法能够在多线程下工作,但是效率很低。
(3)饿汉模式
public class Singleton {
private static Singleton instance = new Singleton(); private Singleton () {}
public static Singleton getInstance() {
return instance;
}
}(未完。。。)
25.异常
(1)在java中,所有的异常都有一个共同的祖先 Throwable(可抛出),它有两个子类,Exception(异常)和 Error(错误)
使用try、catch、finally捕获异常
try {
//可能会出现异常的代码
} catch(Exception e) {
//捕获执行的代码
} finally {
//不管是否发生异常都要执行的代码
}
(2)throw和throws的区别:
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
public void SetAge(int age) throws Exception {
if (age < 0) {
throw new AgeLT0Exception(age);
} else if (age > 150) {
throw new AgeGT150Exception(age);
}
this.age = age;
}
public static void main(String []args) throws Exception {
try {
Student s = new Student(100, "john");
s.SetAge(160);
} catch (AgeLT0Exception e) {
System.out.println(e.toString());
System.out.println(e.exceptMessage());
} catch (AgeGT150Exception e) {
System.out.println(e.toString());
System.out.println(e.exceptMessage());
}
} // 这两个是自定义的异常,继承自Exception
26.线程
在java中创建线程有两种方法,一种是继承java.lang.Thread类;另一种是实现java.lang.Runnable接口。
(1)继承自Thread类:
自定义一个线程类继承自Thread
重写Thread的run方法
创建一个该类的对象
调用该类继承自Thread的start方法开启线程
可以通过Thread的getName方法获取线程的名称。
(2)Runnable接口开发线程
用户开发一个类实现Runnable接口
实现run()
运行线程
(3)多线程之间通信:
- wait():让线程处于冻结状态,被wait的线程会被存储到线程池中
- notify():唤醒线程池中的一个线程(任何一个都有可能)。
- notifyAll():唤醒线程池中的所有线程。
27.File类
java.io.File类代表硬盘上的一个文件或者目录,每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,调用它的方法则可以完成对文件或目录的常用管理操作,例如,创建、删除等操作。
Java中文件或者目录的表示D:\\lujianliang\\1.txt,或者D:/lujianliang/1.txt
(1)
File类的构造方法
由于File类的每一个对象都表示的是一个具体的目录或者文件,所以File类没有提供无参的构造方法,File类的所有构造方法都需要一个目录或者文件的路径作为参数
File(String pathname)
File(String parent, String child)
File(File parent, String child)
(2)
File类常用方法
boolean createNewFile()创建一个新文件
boolean mkdir() / mkdirs()创建新的目录
boolean delete() 删除文件或者目录
void deleteOnExit() 虚拟机退出时删除文件或者目录
boolean exists() 判断当前文件或者目录是否存在
boolean isFile() 判断File对象代表的是否是一个文件
boolean isDirectory() 判断File对象代表的是否是一个目录
String getPath() 返回当前File对象的字符串路径
String getName()返回当前File对象的文件名或者目录名
String getParent()返回当前File对象的父级目录
String getAbsolutePath()返回当前File对象的绝对路径
String[]list()返回当前File对象包含的子目录以及文件
28.FileIo流
(1)
FileInputStream常用方法
构造方法
FileInputStream(String filename)
FileInputStream(File file)
常用方法
close()
int read()
int read(byte[]b)
int read(byte[] bs, int off, int len)
(2)
FileOutputStream常用方法
常用构造方法
FileOutputStream(String path)
FileOutputStream(File file)
FileOutputStream(String path, boolean append)
FileOutputStream(File file, boolean append)
常用方法
close()
void write(int v)
void write(byte[] bs)
void write(byte[] bs, int off, int len)
28.StringBuffer是线程同步的,所以用于多线程,StringBuilder是线程不同步的,通常用于单线程,它的出现能够提高效率。
29.集合
(1)List,Set
List有序,允许重复,元素有索引。
Set无序,不能重复。
30.在java中利用关键字final指示常量,final表示这个变量只能被赋值一次,一旦被赋值就不能再改变了,习惯上,常量名使用全大写。如果希望某个常量可以在一个类中的多个方法中使用,则使用关键字static final设置该常量。
31.使用字符串的拼接效率比较低,每次连接字符串,都会构建一个新的String对象,既耗时又浪费空间,使用StringBuilder可以避免此类问题发生。
32.标准输入流为system.in,但要想使用标准输入流,首先应创建一个Scanner对象,让输入流与该对象关联,Scanner in = new Scanner(system.in);
in.nextLine()和in.next()的区别在于nextLine()可以读取空格,next()是以空格作为结束符。
33.因为Scanner读取输入时可见的,所以不适合读取密码,所以java6引入了Console类来实现这个目的。(它在eclipse上面无法使用)
34.String.format()用来格式化字符串,String.format(“my name is: %s:”, name);
35.Date()类用来显示时间,占位符为%tc,使用方法为:System.out.println(“time is:” + new Date());
36.java是支持C++中的printf的,主要是为了支持占位符的使用,
- 如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。但是普通的算术运算符不能处理大数值,而需要使用大数值类中的add和multiply方法。
38.在java中,所有的异常都是继承自Throwable,之后分为两个分支,Error和Exception,Error类描述了java运行时系统的内部错误和资源耗尽错误,如果出现这种错误,除了通知用户,尽力使程序安全终止外,再也无能为力了。Exception类又分为两个分支,RuntimeException和IOException,由程序错误导致的异常是RuntimeException,而程序本身没问题,由像I/O错误这类问题导致的异常属于其他异常IOException。
派生于RuntimeException的异常包含:错误的类型转换,数组访问越界,访问空指针
不是派生于RuntimeException的异常包括:试图在文件末尾后面读取数据,试图打开一个不存在的文件,试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。
39.堆栈跟踪是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。