您的位置:首页 > 编程语言 > Java开发

Java 基础知识

2016-02-07 11:21 351 查看


1. classpath、path、JAVA_HOME的作用及JAVA环境变量配置

http://www.cnblogs.com/xwdreamer/archive/2010/09/08/2297098.html

2.变量的定义、初始化和使用

Java要求在使用变量前显式定义变量并声明变量值的类型,所以Java被称为是一个强类型的语言。有些语言则没有这些要求。一般说来,在创建大型程序时,强类型有助于减少程序错误。

将变量赋予初值的过程称为初始化变量。一种常见的程序错误是忘记初始化变量。

3. Vector、ArrayList、List

如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

  Vector 是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

  从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度, ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用 Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

4. java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别

        这2个东西应该是java里很常见,很简单,他们都和classpath设定有关,但区别在哪里呢? 我们都知道java里生成对象有如下两种方式:

        1:Object obj = new ClassName(); 直接new一个对象

        2:Class clazz = Class.forName(ClassName);

              Object obj = clazz.newInstance(); 通过class loader动态装载一个类,然后获取这个类的实例

        同样是生成对象,1在编译期间检查classpath, 如果没有类定义,编译没法通过。而2在编译期间是不会检查的,不过需要抛出或者自己catch ClassNotFoundException。 运行期间,如果1编译时依赖的类不在classpath中(导致classloader装载失败),此时抛出的异常就是NoClassDefFoundError。而如果2在运行期间需要装载的类不在classpath中,抛出的则是ClassNotFoundException。

5.  web.xml 中的listener、 filter、servlet 加载顺序及其详解

加载顺序为:context-param -> listener -> filter -> servlet
http://blog.csdn.net/sxbjffsg163/article/details/9955493
6.  JAVA中float与double的区别

float是单精度类型,精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 
double是双精度类型,精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间 
当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f 
例如:float a=1.3; 
则会提示不能将double转化成float  这成为窄型转化 
如果要用float来修饰的话,则应该使用float a=1.3f 
注意float是6位有效数字,第7位数字将会产生四舍五入 
所以如果一个float变量 这样定义:  float a=1.32344435;   则第7位将产生四舍五入(5及5以下的都将舍去)

7.  switch, break, contine, return

8.  java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】

一、封装
对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)
具体来说:
1.属性: 私有 private(提供set和get方法)
2.方法: 公开或私有public/private
3.方法声明 --> 公开
方法实现 --> 隐藏
实现改变时,对对象的使用者没有影响。

二、继承
共性放到父类,特性放到子类;子类,父类 --> 其实就是特殊 --> 一般
1.关键字: extends 例如:Dog extends Animal{}
2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),
C++中是单继承
java中要实现多继承,通过接口来实现。
3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
4.java中的访问修饰符

三、多态
运行时多态。
子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。
1.多态原则:
(1)对象类型不变
(2)只能用引用调用其引用类型中定义的方法
(3)运行时,根据对象的实际类型去找子类覆盖之后的方法
例子:
有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有
eat()方法,sleep()方法中睡6小时,还有wangwang()方法。
现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。

2.对象的强制转换
格式: 引用 instanceof 类型
引用所指的对象是否与类相符,返回值boolean值。
用法:
Animal a=new Cat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.wangwang();
}
说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)

3.多态的灵活变换
(1)用于参数列表上:
public void m(A a){} 可以用A类的任何子类对象作为参数
(2)用在返回值上:
public A m(){} 这个方法可能返回A类的任何子类对象

9. java线程系列---Runnable和Thread的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,

在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

  ->避免点继承的局限,一个类可以继承多个接口。

  ->适合于资源的共享 http://blog.csdn.net/wwww1988600/article/details/7309070 Runnable可以实现资源共享但Thread不能实现资源共享的原因
http://blog.csdn.net/edmond999/article/details/45073329
http://my.oschina.net/leejun2005/blog/483999

10.Java的接口和抽象类
http://www.cnblogs.com/dolphin0520/p/3811437.html
11. 多线程
http://lavasoft.blog.51cto.com/62575/27069 http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html http://www.codeceo.com/article/java-mult-thread.html
12. ThreadLocal
http://www.cnblogs.com/dolphin0520/p/3920407.html
13. 集合类说明及区别
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
http://blog.csdn.net/softwave/article/details/4166598
14. POJO和javabean的异同

什么是POJO

按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

pojo和javabean的比较

pojo的格式是用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。

而javabean虽然数据的获取与pojo一样,但是javabean当中可以有其它的方法。

JavaBean 是一种JAVA语言写成的可重用组件。它的方法命名,构造及行为必须符合特定的约定:

这个类必须有一个公共的缺省构造函数。

这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。

这个类应是可序列化的。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: