Java学习笔记

一、设置环境变量
JAVA_HOME :c:/progrom Files/java/jdk1.6.0 //jdk安装目录
PATH: %JAVA_HOME%\bin;
CLASSPATH: %JAVA_HOME%\lib;
path变量是系统寻找可执行文件的搜索路径
classpath是为java虚拟机寻找.class文件所在的路径

二、Java中方法定义的完整格式:
【访问权限(public protected default private)】
static final abstract synchronized native
返回值类型 void
方法名称(参数列表)【throws 异常..】{}

三、java中实现多态的机制是:
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定。


四、final关键字:
1.final标记的类不能被继承
2.final标记的方法不能被子类重写
3.final标记的变量为常量
使用final修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
例如:
final StringBuffer sb = new StringBuffer("hello");
对于 a = new StringBuffer("java");//编译期错误
对于 a.append(" world");  //ok


五、Java内存泄漏
指一个不再被程序使用的对象或变量一直被占据在内存中。
Java内存泄漏的情况:长生命周期的对象持短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期的对象已经不再需要。
内存泄漏的两个条件:无用 、无法回收。


六、如何优化Hibernate
1.使用双向一对多关联,不使用单向一对多
2.不用一对一,用多对一取代


七、轻量级与重量级划分
一个应用是否属于轻量级还是重量级,主要看它使用了多少服务,使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或运行性能。
对于spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务。如果应用使用的服务很少,可认为此时应用属于轻量级的。
EJB容器因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级。

八、request.getParameter()和request.getAttribute()
1.request.getParameter()取得的是通过容器的实现来取得通过类似post、get等方式传入的数据。request.getAttribute()和setAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
2.request.getParameter()方法传递的数据,会从web客户端传到web服务器端,代表HTTP请求数据,request.getAttribute()和setAttribute()方法传递的数据只会存在于web容器内部。


九、HTTP协议是无状态的,但通过session机制,就能把无状态的变成有状态的。
session的功能就是保存HTTP请求之间的状态数据。

十、类加载机制是指.class文件加载到JVM,并形成Class对象的机制。JVM将类加载过程划分为三个步骤:装载、链接和初始化。
初始化会执行类中的静态初始化代码、构造器代码及静态属性的初始化,在以下四种情况下,初始化过程会被触发:
1.调用了new
2.反射调用了类中的方法
3.子类调用了初始化
4.JVM启动过程中指定的初始化类

十一、集合的选取
List:适用于允许重复元素的单个对象集合场景
Set:适用于不允许重复元素的单个对象集合场景
Map:适用于Key-Value结构的集合场景

ArrayList:适于要通过位置来读取元素的场景
LinkedList:适于要头尾操作及插入指定位置的场景
Vector:适合要线程安全的场景

HashSet:适于对排序没有要求的非重复元素的存放
TreeSet:适于要排序的非重复元素的存放

HashMap:适于大部分Key-Value存取场景
TreeMap:适于排序的Key-Value场景

十二、过滤器与拦截器区别
1.拦截器是基于java反射机制的,而过滤器是基于函数回调。
2.过滤器依赖与servlet容器,而拦截器不依赖于servlet容器。
3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4.拦截器可以访问action上下文,值栈里的对象,而过滤器不能。
5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

十三、Session与Cookie
servlet使用Session来跟踪和管理会话时的状态。服务器上通过Session来区分不同的用户。任何连接到服务器的用户都会被分配一个不会重复的SessionID由服务器管理。
Servlet的会话跟踪:Cookie
Cookie是一种通用机制,服务器端程序可以用它来保存或获取连接的客户端信息,未来该客户端向同一个服务端程序提交的任何HTTP请求都将导致读取先前的访问所存储的客户端状态信息。
1.Session将作息保存在服务器上,而Cookie保存在客户端。
2.Session比Cookie更安全
3.Session更占用服务器资源

十四、泛型
数组与泛型不同点:
1.在java语言中,数组是支持协变的,例Integer类是Number类的子类,那么将Integer类型的数组赋值给Number类型的数组,不会出错。
但对于泛型而言却不支持协变,因为这样会破坏类型安全。
数组能够协变而泛型不能协变的另一个后果是不能实例化泛型参数的数组,如new List[3],如果泛型使用了通配符“?”,则可以创建,如new List[3].
2.数组具体化的,数组会在运行时才知道并检查它们的元素类型约束,泛型则是通过擦除来实现的。因此,泛型只在编译时强化它们的类型信息,并在运行时擦除它们的元素类型信息,擦除就是使泛型可以与没有使用泛型的代码随意进行互用。

泛型中的擦除:
boolean result = (new ArrayList().getClass()==new ArrayList().getClass()); //result为true
从表面上看,ArrayList和ArrayList是不同的,困为泛型不是协变的,但是程序编译后就将类型信息擦除了,因此为true。

十五、
如何将字串String转成int?
1.int i = Integer.parseInt(String);
2.int i = Integer.valueOf(str).intValue();
注:字串转成Double、float、Long的方法大同小异。

如何将整数int转成字串String?
1.String s = String.valueOf(i);
2.String s = Integer.toString(i);
3.String s = ""+i;
注:Double、float、Long转成字串的方法大同小异。

十六、Spring
控制反转:控制权由应用代码中转到了外部容器,控制权的转移即反转。
依赖注入:组件之间的依赖关系由容器在运行期决定,即由容器动态的将某种依赖关系注入到组件之中。

面向切面编程的价值主要体现在事务处理、日志管理、权限控制等与业务无关却为业务模块所共同调用的逻辑或责任上。
Spring通过使用AOP来提供声明式事务管理,从本质上来讲,Spring的事务管理是基于动态AOP的。
Spring的事务管理机制实现的原理,就是通过一个动态代理对所有需要事务管理的Bean进行加载,以及根据invoke方法中的配置对当前调用的方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。

在业务方法上进行@Transactional注解,使可以将事务规则应用到业务逻辑中,因为事务管理本身就是一个典型的切面,正好是AOP技术的用武之地。

依赖注入容器为声明式事务管理提供了基础设施,使得Bean对于Spring框架而言是可管理的,而Spring AOP则是声明式事务管理的直接实现者。


十七、synchronized
仅仅因为代码块由锁保护并不代表两个线程不能同时执行该代码块,它只表示如果两个线程正在等待相同的锁,则它们不能同时执行该代码。
创建synchronized块的最简单的方法是将声明成synchronized,这表示在进入方法主体之前,调用者必须获得锁。对于普通的synchronized方法,这个锁是一个对象,将针对它调用方法。对于静态synchronized方法,这个锁是与Class对象相当的监控器,在该对象中声明了方法。
同步块使用synchronized(this)与synchronized方法使用同一个锁。

十八、java中的传参
通过参数传递不能改变实参,但可以改变实参所指向的对象的数据。
引用自身的改变与引用所指向的对象的改变是不同的,前者指的是引用指向了其他的地址空间,而后者是指通过引用改变了所指对象的数据。(例如:改变了成员变量的值)


十九、
Web服务器是前端处理HTTP请求的服务器,如:Apache httpd。
应用服务器是指运行应用的web容器,如:运行servlet容器的tomcat。
Web服务器一般会将一部分请求委托应用服务器处理,但许多应用服务器本身也有Web服务器的功能,如tomcat。另一些必须借助和Web服务器连接的中间驱动如:hwsgi。

 

 

 

 

 

 


 

你可能感兴趣的:(JavaSE)