java 复习002
java东西太多了,我都有点小凌乱了,记得太没结构了
java内存回收机制:垃圾收集GC(Garbage Collection)
两种常用方法:
引用计数(早期使用)
- 简介:堆中对象每次被栈中引用指向时,它的引用计数就加一,引用被删除时就减一;当引用计数为0的时候就被回收
- 优点:操作简单,运行很快,在实时环境中比较有利
- 缺点:容易出现循环引用(当A对象中有B对象的引用,B对象同时也存在A对象的引用时,AB对象的引用永远不可能为0,类似于死锁)
引用遍历(现在使用)
- 简介:从栈中根引用开始递归遍历可达对象,标记所有可达对象,然后回收没有标记的对象
- 优点:不会出现循环引用,因为就算AB循环了,但是它们共同不可达,同样会被回收
- 缺点:实现复杂,运行慢,运行时要打断应用程序工作
java 异常机制
- 异常:
程序出现异常,就是在当前环境下没有相应的处理程序可以调用时,程序会出现一种中断现象。
- 处理机制简介:
- 出现异常时JVM会抛出一个异常类对象,如果程序中有相应的
try-catch
语句的话,会交给程序处理,如果没有的话直接交给JVM,JVM一般会在控制台打印出错信息。 - 存在
try-catch
的话,当try
捕获到异常类对象时交给catch
,匹配catch
中定义的异常类,相同则执行catch
语句块,找不见对应的catch
的话就交给JVM了 - Error和Exception的区别:
- Error属于JVM一级的错误,可能和操作系统有关,程序无法控制和处理
- Exceptioan是开发者级的错误,大多数情况下可以由程序控制和处理,除了一些unchecked exception外,RuntimeException和其子类都是unchecked excception,如:NullPointerException,ClassCastException和IndexOutOfBoundsException
- 出现异常时JVM会抛出一个异常类对象,如果程序中有相应的
反射机制(Reflection)
简介(百度百科)
- 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义
- Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配
- 但需注意的是:如果使用不当,反射的成本很高。
作用
- 通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性
- 可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值
使用
得到一个类说明
- 1
- 2
- 3
- Class cls=类.class;
- Class cls=对象.getClass();
- Class.forName("类路径");
- 1
得到一个方法并唤起它
- 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)});
- 1
Struts2
- struts2运行机制
- 拦截器实现(动态代理,详见:java_review001)
- 由
ActionInvocation
控制所有的拦截器 - 拦截器先执行
before
的代码,再调ActionInvocation.invoke()
方法,最后执行after
代码 - 对
ActionInvocation
中的invoke
方法实现了递归调用
- 由
- filter(过滤器)<->interaptor(拦截器)
- 拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的。
- 过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
- 拦截器只能对Action请求起作用,而过滤器可以对几乎所有的请求起作用。
- 拦截器可以访问Action上下文、值栈里的对象,而过滤器不能
- 在Action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
Spring
Spring在MVC模式中处于Controller位置
- IoC(依赖注入)
- 简介:通常,服务代码需要先创建待使用的对象实例;而IoC模式中,创建待使用实例的任务由IoC容器来完成,服务代码直接使用实例
- 优势:
- 应用组件不需要在运行时自己寻找待使用对象,简化代码
- 只需在配置文件中管理组件依赖关系,不需要编写依赖关系代码
- 降低了组件间的耦合度,提高类的重用性,利于系统集成和配置
- 实现方法:反射机制
- AOP(面向切面编程)
- 简介:在核心服务代码前后插入其它辅助服务代码,相当于将整个服务切成片了
- 优势:轻松实现辅助模块的装配
- 实现:动态代理(CGLIB),底层实现参考:Spring AOP 实现原理与 CGLIB 应用
PreparedStatement和Statement
- PreparedStatement是参数化查询,使用
?
占位;Statement就是通用的SQL查询,凑SQL语句 - PreparedStatement更快,因为SQL语句会预编译到数据库系统中,以后有相同的SQL请求不用再做分析->编译->优化的步骤了
- SQL注入式攻击,指用户在填写查询信息时加入恶意的SQL代码,如
'; DROP TABLE users
- PreparedStatement能防止SQL注入式攻击,原因:PreparedStatement在参数传入前,它的SQL语句就在数据库中编译好了,执行时直接套用参数,所以参数中的SQL语句不会被数据库执行
- 另一种防止SQL注入式攻击的方法:对传入字符串做转换(将单引号字符取代为连续2个单引号字符,因为连续2个单引号字符在SQL数据库中会视为字符中的一个单引号字符)
线程同步
线程创建
- 实现
Runnable
接口,使用时需创建Thread对象,然后将实现了Runnable
接口的对象传进去 - 直接继承
Thread
类(Thread
本身已经实现了Runnable
接口),不用再创建Thread对象了,直接调用start()
方法就启动线程了 - 尽量使用
Runnable
接口,因为接口的可扩展性好,它还可以继承一个别的类;而继承Thread
类后不能再继承其它类了
- 实现
线程关闭
- 在父线程里使用
interrupt()
方法,在子线程里捕获InterruptedExcepution
异常,调用return
就结束子进程了(不太建议使用) - 直接在父进程使用
stop()
方法,直接杀死子进程(太粗暴,不使用) - 在子进程中添加
flag
属性,并给run()
方法里加while(flag)
语句,这样父进程只要将子进程的flag
属性设为false
,run()
方法就结束了,整个进程也就结束了
- 在父线程里使用
线程同步
- sleep
Thread.sleep(1000)
,表示当前线程睡眠1秒钟- sleep时依然拥有着当前synchronized代码的锁,别的线程无法访问(区别于wait)
- 加锁(synchronized)
- 函数前:
public synchronized void doSomething(){}
- 代码块:
synchronized(this){doSomething();}
- 作用:当执行到
doSomething()
方法时锁定当前对象,不允许其他线程访问执行doSomething()
函数,但可以执行别的没有加锁的代码;如果程序中有多个synchronized,则看谁先执行,后面的需要等待前面的执行完才能执行
- 函数前:
- wait
- 使用前提是必须在synchronized代码内
this.wait()
,表示让执行当前synchronized代码的线程等待- wait时,当前线程将进入阻塞状态,并且失去当前synchronized代码的锁(区别于sleep)
- notify
- 和wait相对应使用
this.notify()
,表示叫醒一个在当前synchronized代码wait
的线程
- sleep
参考至:
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的更多相关文章
- java 复习003 之排序篇
由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...
- java 复习001
java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- Java复习11. 单例编程
Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton { private static Singleton instance; ...
- Java复习9网路编程
Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...
- Java复习8.多线程
Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...
- Java复习10.Servlet编程
Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...
- Java复习6异常处理
Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...
- Java复习4.数组初始化.
Java复习4.Java中的数组声明方式 20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...
随机推荐
- 汇编debug 截图2
- C#中用JavaScriptSerializer和Json.Net操作json格式的文件
1.json文件 2.写出对应的类 //折扣 public class Discount { public string Qty { get; set; } public string percent ...
- Spring两种实现AOP的方式
有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...
- OpenCV码源笔记——RandomTrees (一)
OpenCV2.3中Random Trees(R.T.)的继承结构: API: CvRTParams 定义R.T.训练用参数,CvDTreeParams的扩展子类,但并不用到CvDTreeParams ...
- [Codeforces677B]Vanya and Food Processor(模拟,数学)
题目链接:http://codeforces.com/contest/677/problem/B 题意:n个土豆,每个土豆高ai.现在有个加工机,最高能放h,每次能加工k.问需要多少次才能把土豆全加工 ...
- Ubuntu使用总结
错误 鼠标闪烁解决 系统设置->显示—>未知显示器->关闭->应用->选择当前配置 提示sudo: unable to resolve host ,亦即无法解析主机. 原 ...
- Codeforces 4538 (状态压缩dp)Little Pony and Harmony Chest
Little Pony and Harmony Chest 经典状态压缩dp #include <cstdio> #include <cstring> #include < ...
- public,protected,friendly,private的访问权限
请说出作用域public,private,protected,以及不写时的区别 这四个作用域的可见范围如下表所示. 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly. 作用域 ...
- UVa 11174 (乘法逆元) Stand in a Line
题意: 有n个人排队,要求每个人不能排在自己父亲的前面(如果有的话),求所有的排队方案数模1e9+7的值. 分析: <训练指南>上分析得挺清楚的,把公式贴一下吧: 设f(i)为以i为根节点 ...
- web交互方式
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 优点:后端程序编写比较容易. 缺点:请求中有大半是无用,浪费带宽和服务器资源. 实例:适于小型应用. 长轮询:客 ...