自己当初在学习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

 

 

  1. java使用extends表示继承,而且java中只存在公有继承。
  2. 当子类和父类有相同的方法名时,通过super.方法名  来调用父类的方法。
  3. 在子类的构造中,要调用父类的构造,super(var1,var2,...);这样就可以了调用父类的构造了。
  4. 当需要阻止人们利用某个类来定义子类的时候,就用final修饰这个类。
  5. java的抽象类用abstract修饰
  6. java的抽象类可以包含具体的方法,尽量将通用的变量和方法放在抽象类中。java的抽象类也不能被实例化。
  7. java中的protected方法对本包和所有子类可见,这与C++稍微不同。
  8. java中的Object类是所有类的超类(父类),Object类中有一个equals方法用于检测一个对象是否等于另外一个对象。
  9. StringTokenizer 将符合一定格式的字符串拆分开,也就是解析
  10. 初始化字符串对象,尽量不用构造方法,而是直接初始化,这样效率更高。String good = "Yet another string object"
  11. 避免创建无用对象,因为创建和初始化对象时很耗费资源的。
  12. 不到万不得已,不要使用Math.pow()方法,因为当指数是小数的时候,该方法会比直接使用乘积慢300-600倍左右。
  13. 使用equals而非 ==
  14. 不到万不得已,不要使用Math.pow,因为当指数是小数的时候,Math.pow要比乘积慢300-600倍。
  15. Java提供了Runtime类来执行shell命令。由于这些是外部的命令,因此异常处理就显得异常重要。
  16. 在Java中发送邮件也很简单。你只需装一下Java Mail这个jar包,放到你的类路径里即可。
  17. 将表格导出成pdf也是一个比较常见的需求。通过itextpdf,导出pdf也不是什么难事。
  18. (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)多线程之间通信:

  1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中
  2. notify():唤醒线程池中的一个线程(任何一个都有可能)。
  3. 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的,主要是为了支持占位符的使用,

  1. 如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。但是普通的算术运算符不能处理大数值,而需要使用大数值类中的add和multiply方法。

38.在java中,所有的异常都是继承自Throwable,之后分为两个分支,Error和Exception,Error类描述了java运行时系统的内部错误和资源耗尽错误,如果出现这种错误,除了通知用户,尽力使程序安全终止外,再也无能为力了。Exception类又分为两个分支,RuntimeException和IOException,由程序错误导致的异常是RuntimeException,而程序本身没问题,由像I/O错误这类问题导致的异常属于其他异常IOException。

派生于RuntimeException的异常包含:错误的类型转换,数组访问越界,访问空指针

不是派生于RuntimeException的异常包括:试图在文件末尾后面读取数据,试图打开一个不存在的文件,试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。

39.堆栈跟踪是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。

 

posted on 2016-04-27 08:33  LyndonYoung  阅读(167)  评论(0编辑  收藏  举报