java东西太多了,我都有点小凌乱了,记得太没结构了   

java内存回收机制:垃圾收集GC(Garbage Collection)

两种常用方法:

  1. 引用计数(早期使用)

    • 简介:堆中对象每次被栈中引用指向时,它的引用计数就加一,引用被删除时就减一;当引用计数为0的时候就被回收
    • 优点:操作简单,运行很快,在实时环境中比较有利
    • 缺点:容易出现循环引用(当A对象中有B对象的引用,B对象同时也存在A对象的引用时,AB对象的引用永远不可能为0,类似于死锁
  2. 引用遍历(现在使用)

    • 简介:从栈中根引用开始递归遍历可达对象,标记所有可达对象,然后回收没有标记的对象
    • 优点:不会出现循环引用,因为就算AB循环了,但是它们共同不可达,同样会被回收
    • 缺点:实现复杂,运行慢,运行时要打断应用程序工作

java 异常机制

  1. 异常:

    程序出现异常,就是在当前环境下没有相应的处理程序可以调用时,程序会出现一种中断现象。

  2. 处理机制简介:
    1. 出现异常时JVM会抛出一个异常类对象,如果程序中有相应的try-catch语句的话,会交给程序处理,如果没有的话直接交给JVM,JVM一般会在控制台打印出错信息。
    2. 存在try-catch的话,当try捕获到异常类对象时交给catch,匹配catch中定义的异常类,相同则执行catch语句块,找不见对应的catch的话就交给JVM了
    3. Error和Exception的区别:
      1. Error属于JVM一级的错误,可能和操作系统有关,程序无法控制和处理
      2. Exceptioan是开发者级的错误,大多数情况下可以由程序控制和处理,除了一些unchecked exception外,RuntimeException和其子类都是unchecked excception,如:NullPointerException,ClassCastException和IndexOutOfBoundsException

反射机制(Reflection)

  1. 简介(百度百科)

    1. 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义
    2. Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配
    3. 但需注意的是:如果使用不当,反射的成本很高。
  2. 作用

    1. 通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性
    2. 可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值
  3. 使用

    1. 得到一个类说明

      1
      2
      3
      Class cls=类.class;
      Class cls=对象.getClass();
      Class.forName("类路径");
    2. 得到一个方法并唤起它

      1
      2
      3
      4
      5
      Class cls=类.class;
      Constructor cons=cls.getConstructor(new Class[]{String.class});
      Object obj=cons.newInstance(new Object[]{"aaa"});
      Method method=cls.getMethod("方法名",new Class[]{String.class,Integer.class});
      method.invoke(obj,new Object[]{"aa",new Integer(1)});

Struts2

  1. struts2运行机制
  2. 拦截器实现(动态代理,详见:java_review001
    1. ActionInvocation控制所有的拦截器
    2. 拦截器先执行before的代码,再调ActionInvocation.invoke()方法,最后执行after代码
    3. ActionInvocation中的invoke方法实现了递归调用
  3. filter(过滤器)<->interaptor(拦截器)
    1. 拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的。
    2. 过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
    3. 拦截器只能对Action请求起作用,而过滤器可以对几乎所有的请求起作用。
    4. 拦截器可以访问Action上下文、值栈里的对象,而过滤器不能
    5. 在Action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

Spring

Spring在MVC模式中处于Controller位置

  1. IoC(依赖注入)
    1. 简介:通常,服务代码需要先创建待使用的对象实例;而IoC模式中,创建待使用实例的任务由IoC容器来完成,服务代码直接使用实例
    2. 优势:
      1. 应用组件不需要在运行时自己寻找待使用对象,简化代码
      2. 只需在配置文件中管理组件依赖关系,不需要编写依赖关系代码
      3. 降低了组件间的耦合度,提高类的重用性,利于系统集成和配置
    3. 实现方法:反射机制
  2. AOP(面向切面编程)
    1. 简介:在核心服务代码前后插入其它辅助服务代码,相当于将整个服务切成片了
    2. 优势:轻松实现辅助模块的装配
    3. 实现:动态代理(CGLIB),底层实现参考:Spring AOP 实现原理与 CGLIB 应用

PreparedStatement和Statement

  1. PreparedStatement是参数化查询,使用?占位;Statement就是通用的SQL查询,凑SQL语句
  2. PreparedStatement更快,因为SQL语句会预编译到数据库系统中,以后有相同的SQL请求不用再做分析->编译->优化的步骤了
  3. SQL注入式攻击,指用户在填写查询信息时加入恶意的SQL代码,如'; DROP TABLE users
  4. PreparedStatement能防止SQL注入式攻击,原因:PreparedStatement在参数传入前,它的SQL语句就在数据库中编译好了,执行时直接套用参数,所以参数中的SQL语句不会被数据库执行
  5. 另一种防止SQL注入式攻击的方法:对传入字符串做转换(将单引号字符取代为连续2个单引号字符,因为连续2个单引号字符在SQL数据库中会视为字符中的一个单引号字符)

线程同步

  1. 线程创建

    1. 实现Runnable接口,使用时需创建Thread对象,然后将实现了Runnable接口的对象传进去
    2. 直接继承Thread类(Thread本身已经实现了Runnable接口),不用再创建Thread对象了,直接调用start()方法就启动线程了
    3. 尽量使用Runnable接口,因为接口的可扩展性好,它还可以继承一个别的类;而继承Thread类后不能再继承其它类了
  2. 线程关闭

    1. 在父线程里使用interrupt()方法,在子线程里捕获InterruptedExcepution异常,调用return就结束子进程了(不太建议使用)
    2. 直接在父进程使用stop()方法,直接杀死子进程(太粗暴,不使用)
    3. 在子进程中添加flag属性,并给run()方法里加while(flag)语句,这样父进程只要将子进程的flag属性设为falserun()方法就结束了,整个进程也就结束了
  3. 线程同步

    1. sleep
      1. Thread.sleep(1000),表示当前线程睡眠1秒钟
      2. sleep时依然拥有着当前synchronized代码的锁,别的线程无法访问(区别于wait)
    2. 加锁(synchronized)
      1. 函数前:public synchronized void doSomething(){}
      2. 代码块:synchronized(this){doSomething();}
      3. 作用:当执行到doSomething()方法时锁定当前对象,不允许其他线程访问执行doSomething()函数,但可以执行别的没有加锁的代码;如果程序中有多个synchronized,则看谁先执行,后面的需要等待前面的执行完才能执行
    3. wait
      1. 使用前提是必须在synchronized代码内
      2. this.wait(),表示让执行当前synchronized代码的线程等待
      3. wait时,当前线程将进入阻塞状态,并且失去当前synchronized代码的锁(区别于sleep)
    4. notify
      1. 和wait相对应使用
      2. this.notify(),表示叫醒一个在当前synchronized代码wait的线程

参考至:
http://www.cnblogs.com/laoyangHJ/articles/java_gc.html
http://blog.csdn.net/kiss_vicente/article/details/7597700

原文地址: http://vview.ml/2014/04/12/java_review002.html
written by Vell Bibi posted at VBlog

java 复习002的更多相关文章

  1. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  2. java 复习001

    java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...

  3. java复习(1)---java与C++区别

    [系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...

  4. Java复习11. 单例编程

    Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton {     private static Singleton instance; ...

  5. Java复习9网路编程

    Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...

  6. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  7. Java复习10.Servlet编程

    Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...

  8. Java复习6异常处理

    Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...

  9. Java复习4.数组初始化.

    Java复习4.Java中的数组声明方式  20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...

随机推荐

  1. iOS 深入理解RunLoop

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...

  2. Git教程之管理修改(6)

    Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件.你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了 ...

  3. Django admin的一些有用定制

    Model实例,myapp/models.py: from django.db import models class Blog(models.Model): name = models.CharFi ...

  4. Log4j具体使用实例

    首先,下载log4j.jar架包(网上很多,随便下载一个就可以了), 第一步:新建java项目,Testlog4j,再在src中建立com.Testlog4j包,再建一个testlog4j.java文 ...

  5. 对mysql经常使用语句的详细总结

    下面总结的知识点全是经常用的,全都是干货,好好收藏吧. /* 启动mysql */net start mysql /* 连接与断开服务器 */mysql -h 地址 -p 端口 -u 用户名 -p 密 ...

  6. Jenkins iOS – Git, xcodebuild, TestFlight

    Introduction with Jenkins iOS If you are new to continuous integration for mobile platforms then you ...

  7. bzoj2395

    分组赛时学到的最小乘积生成树模型,感觉这个思路非常神,可以说是数形结合的经典问题 由于生成树有两个权值,我们把每个生成树的权值表示成点坐标(sa,sb) 显然我们知道,乘积最小,那么点必然落在下凸壳上 ...

  8. MySQL Timeout解析

    “And God said, Let there be network: and there was timeout”在使用MySQL的过程中,你是否遇到了众多让人百思不得其解的Timeout?那么这 ...

  9. oracle 11g rac 无法自动启动

    如果以上的操作依然不能使数据库资源自动启动,那么参考下面这篇文章修改资源AUTO_START属性. 查看资源状态: crsctl status resource 资源       -p     crs ...

  10. IOS cocos2d笔记1

    结点添加.删除.获取1.结点:CCNode * childNode = [CCNode node]; 2.加入结点[myNode addChild:childNode z:0 tag:123];//z ...