java基础复习


机器语言--》汇编语言--》高级语言;
环境搭建:一定要装jdk?
JAVA_HOME
CLASSPATH
PATH=%JAVA_HOME%\bin;

jdk与jre的区别: jdk一般为开发环境, jre一般为运行环境

关键字和保留字: 不要起成类名、变量名、方法名称;

修饰符:
权限:private, protected, public, 默认的。
static: 静态块, 静态变量, 静态方法; 表示类成员;

一个类中: 静态变量, 静态方法, 静态块, 动态块, 构造方法,实例变量, 实例方法。
先加载静态变量,然后执行静态块,类直接掉用静态方法;
类创建实例时,在加载实例变量,然后在执行动态块,在执行构造方法,最后调用实例方法;

final: 修饰类,表示该类不能被继承;
修饰方法,表示该方法不能被子类重写;
修饰变量,如果是基本数据类型,表示该变量值不能更改; 如果是引用数据类型,表示该变量的地址不能更改;

说说final, finally, finalize 三个的区别?

finally 一定会执行吗? 不一定。 并且finally一定是在return之前执行的;
Runtime.getRuntime().exit(0);
System.exit(0);
见到这两行代码,finally是不可能执行的;

abstract 抽象:
interface 接口; 接口中的方法都是抽象方法;并且是public修饰的; 所有的变量都是常量;
抽象类: 里面可以没有抽象方法; 只有要一个抽象方法的必须是抽象类; 抽象类不能实例化,抽象类中的构造方法是能被子类调用的;
抽象方法: 方法名必须被abstract修饰, 没有方法体;

native : java语言调用其他语言的方法修饰符;
transient: 修饰的实例变量不参与序列化过程;
volatile: 为线程而生,作为同步多个线程时被不同线程值访问或修改;

super和this
super: 表示父子类之间的方法调用
this: 表示本类之间的方法调用; (重载方法)

return : 返回
continue: 继续执行;
break: 结束当前循环;

循环:for, while, do-while, foreach;
goto是一个保留字,没有这个功能;

数据类型:基本数据类型, 引用数据类型
基本数据类型: 数字型, 字符串, 布尔型; 一共8个; byte, short, int, long , float,,double, char, boolean
数字型: 整数型, 浮点型; byte, short, int, long, float, double;
特别强调double的转换问题, 保留小数点后面的位数;
Double m = 12.1d;
double n = 9.06d;
double k = m-n;
DecimalFormat df = new DecimalFormat(".##");
System.out.println(df.format(k));
System.out.println(k);
字符串:char
布尔型:boolean


引用数据类型: 除了基本数据类型以外的都是引用数据类型; 比如: Integer, Long, String......
byte Byte
short Short
int Integer,
long Long,
float Float
double Double
char character
boolean Boolean
这两种数据类型有什么区别。 比如int 和integer的区别?
1.存储的位置不同, int存放在栈中, 数据值也在栈中; integer 变量声明在栈中,值在堆中, 栈指向堆的地址;
2.int为基本数据类型, integer 为引用数据类型;
3.初始值不同, int默认为0, integer默认为null;

数组: 一维数组或多维数组;
自己的数组如何扩容(缩容)的问题,底层实现的原理;
Object [] objs = new Object[30];
System.out.println("---length:"+objs.length);
//objs = Arrays.copyOf(objs, 10);
//1.相同类型创建一个新长度的数组;
//2.把原数组的数据付给新长度的数组中;
//3.把新数组的地址指向原数组的变量;
Object [] temp = new Object[10];
System.out.println("---length:"+objs.length);

面向对象的特征:
1、封装
2、继续或实现
3、多态

面向对象开发五大基本原则:
1、单一责任原则: 一个类中的功能的职责单一,简单;
2、开发闭合原则: 核心方法应当私有,不向外界暴露; 如需客户端调用,需专门写一个公共的方法来调用核心方法;
3、替换原则: 父子类之间; 父类能调用的子类也能调用;
4、依赖原则:
5、接口分离原则: 多写接口, 模块间用接口进行隔离;


IO流
分字节流、字符流、缓冲流、管道流、对象流、打印流等
字节流: InputStream、OutputStream
字符流: Reader, Writer
缓冲流: BufferedInputStream、BufferedOutputStream
管道流: PipedInputStream、PipedOutputStream
对象流: ObjectInputStream、 ObjectOutputStream
ObjectInputStream、保存对象时候,一定要对该对象进行序列号操作;
打印流: PrintWriter

nio:提供非阻塞式的高伸缩性网络的读写流;

io的设计的过程中, 主要使用了两种设计模式 装饰模式 、 适配器模式;

public abstract class OutputStream 顶级父类

public class FileOutputStream extends OutputStream

public class FilterOutputStream extends OutputStream
FilterOutputStream(OutputStream out)

public class BufferedOutputStream extends FilterOutputStream
BufferedOutputStream(OutputStream out)

单例模式、工厂模式(简单工厂,工厂方法,抽象工厂),原型模式、 建造者模式, 适配器模式, 代理模式、 装饰模式、 观察者模式、 迭代器模式 Iterator、责任链模式, 模板方法模式等


util集合
Collection集合的子类:List, Set, Queue, Stack, Deque; Map不是Collection下的子类;
Collections 是一个集合操作的工具类,里面封装了大量的static方法;

很多第三方的jar包集合工具类, 一般都是返回的是LinkedList或LinkedHashMap;


排序有那些算法: 冒泡排序、鸡尾酒排序(双向的冒泡排序)、选择排序、 插入排序、快速排序、二叉树排序、合并排序
重点是冒泡、快速和Arrays.sort方法三个;

List集合 ArrayList、Vector、 LinkedList、 Stack
其中ArrayList、Vector、Stack底层都是Object[]作为存储单元的。 而LinkedList以链表作为存储单元的; 链表和数组都是线型方法存储的。
ArrayList线程不安全; Vector线程安全; Stack栈存储,遵循先进后出,后进先出的存储规则;

优缺点:
数组存储, 方便于查询定位、修改数据, 不方便于插入数据、删除数据;数据存放超标报异常或者需要扩容(Arrays.copyof);
链表存储: 方便于插入数据、删除数据、修改数据; 不方便于查询定位;

Map 集合: HashMap, Hashtable, TreeMap, LinkedHashMap, Properties
1、Map集合不是Collection接口下的子类;
2、Map集合以key-value对的方式来存储数据的; 数据是存放在value中的,由key来查询定位的;
3、map的key不能重复,重复的标准是什么?
两个对象equals为true,hashcode一定相同;
如果两个对象的hashcode相同,equals不一定为true;

key的hash相同,并且key的equals为true就表示map的key是相同的,map的value就覆盖该map的key对应的数据;

如果key的hash相同,且key的equals为false,就以当前key的数组为链表的头结点,第二个key指向下一个节点(当前key做成了一个链表的存储结构)

map的key主要以数组作为存储, key的hash根据算法定位索引下标; 对应的值如果有一个,就是当前实体; 如果有多个,就是一个链表对象;

map的key-value的实体是存放在一个一维数组中的, Entry[] table

map就是一个无序的存储结构, 根据key来找到想要的value数据; 如果相对map进行排序, 请参考TreeMap类;


HashMap和Hashtable 的区别
1、hashMap是一个新集合, jdk1.2才出来,继承AbstractMap; hashtable是一个老集合,jdk1.0都有,继承 Dictionary,该类已经过时;
2、hashmap是线程不安全的; hashtable线程安全的;
3、hashMap允许null键null值; hashtable 不允许null键null值;

LinkedHashMap 具有链表作为存储单元的map集合;

Properties hashtable下的子类; 具有读取资源文件的方法, load; db.properties

set 集合:HashSet、TreeSet、LinkedHashSet
特点: 值不能重复; 因为set集合中的值存放在hashMap的key中; 而key不能重复;

数据结构: 数组、List、Map、set、Queue、Stack、LinkedList、 链表、队列、 堆栈、 二叉树、树、红黑树、
算法: 二叉查找、二叉排序、冒泡、选择、插入、希尔、快速、归并等 (稳定排序、不稳定排序、随机排序)

线程:
1、继承Thread、 实现Runable 两种方式
2、线程启动调用start方法; 执行方法是run方法;
3、线程的五种状态(就绪、执行、休眠、挂起、终止)
常用的一些方法及作用:
start、sleep、wait、notify、notifyAll、interrupt、yield、join等
4、线程池 ThreadGroup 当前类的一些作用;
5、精灵线程: 运行在程序后台的线程,一般被用于在后台为其它线程提供服务。

线程示例:
1、龟兔赛跑(兔子先跑,然后乌龟再跑....)
2、抢购汽车票、火车票(100个票,同时启动1k个线程来抢)

并发访问: synchronized关键字(作用于方法,也可作用于引用对象), Lock接口(lock,unlock);

泛型:
枚举: 1.enum 的定义;
2.enum枚举的集合 Enumeration

反射:
Class
ClassLoader
Constructor
Annotation
Field
Method

InvestBean ib = new InvestBean();
ib.setCid(234L);
System.out.println("---1:"+ib.getCid());

try {
Class cls = Class.forName("com.test.InvestBean");
Object ib2 = cls.newInstance();
//ib2.setCid(234L);

Method cidSet = ib2.getClass().getMethod("setCid", Long.class);
cidSet.invoke(ib2, 234L);

Method cidGet = ib2.getClass().getMethod("getCid");
System.out.println("---3:"+cidGet.invoke(ib2));
} catch (Exception e) {
e.printStackTrace();
}


debug: 调试模式加断点, 执行流程控制;

网络编程:
socket 套接字
Socket 客户端
ServerSocket 服务器端

URLConnection、URL、HttpURLConnection 类, 连接URL互联网网页,读取里面的内容;






-----------------java之api:
1.HashMap与Hashtable的比较:
2.java.awt中常用的布局方式
3.实现线程通信的方法有哪些
4.String和StringBuffer, StringBulider的区别
5.至少写出String中的10常用方法
6.重写clone方法的步骤
7.Collection和Collections的区别
8.Collection的三个子接口的特点:
9.创建线程的两个方法
10.设置线程优先级的方法 setPriority
11.sleep与wait的区别;
12.在HashMap中key的equals与hashcode之间的关系、
13.自然排序实现哪个接口,重写哪个方法
14.什么是对象序列化和对象反序列化:
15.String s="Hello world!"声明了什么?
16.Person p = new Person(); 声明了什么;
16.String中是否有反转的方法

17.File类在创建实例的时候会不会生成实际存在的文件?那要怎么样才能生成这么一个实例?如果不能,那么请说出一个能够生成的类。
18.列出五个字节输出流类.
19.静态方法能不能调用非静态方法和访问非静态变量,说出理由。
21.解析一下同步和异步的区别,分别在什么情况下使用?
22.实现同步的方法有哪些?
23.构造方法必须满足哪些条件?
24.当类被加载是,请简述一下类中的静态声明执行顺序
25.error与exception的区别:
26.数组有没有length()这个方法?String有没有length()这个方法?
27.String str=new String("miss")中有几个对象,分别为?
28.集合类与数组的区别
29.集合中的iterator()方法是用来做什么的;
31.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
32.精灵线程和用户线程的区别:
如果一个线程被设为守护线程或者用户线程,那么该线程处于后台运行,当主线程做完,那么整个程序就结束了,自然而然该线程也就结束了
33.流按功能可以分为哪几类?
34.字节流的父类和字符类的父类分别是什么?
35.缓冲流的有什么优点?
36.解释下死锁发生的原因,以及怎么样解决死锁
37.判断线程是否被中断并且写出来. isInterrupted()
38.按钮应该添加什么事件,鼠标应该添加什么事件,获得焦点和失去焦点应该添加什么事件
39.数组,LinkedList,Vector,ArrayList他们的性能差异
40.jvm是如何加载类的?
41.线程的生命周期. (五个状态)

 


-----------java之面向对象:
1.重载与重写的区别:
重载: 一个类之间, 方法名相同;
重写: 父子类之间, 方法名相同,参数列表相同,返回值相同; 修饰符范围只能越来越大,抛出的异常越来越小;
2.抽象类与接口的比较
3.抽象类和非抽象类的不同点
4.链表的优点
5.循环有哪几种形式
6.Person person=new Person();执行的步骤
7.8大基本类型以及其对应的封装类
8.final的作用
9.构造器Constructor是否可被override
10.子类继承父类的特点。
11.throw throws的区别
13.equals()和==比较两个字符串是否相同有什么区别
14.java的权限修饰符有哪几种,它们的可见性分别是什么
15.说出能用于switch()后的括号中的数据类型 byte,short, int, char, boolean,枚举; jdk7可以使用string;
16.throw、throws、try、catch、finally他们在java异常机制中起到的作用
17.包的意义:
18.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?
19.当类被加载是,请简述一下类中的静态声明执行顺序
20.多态的好处
21.类与对象的关系
22.静态方法注意事项
23.int和Integer有什么区别(基本数据类跟包装器类有什么区别?)
24.子类与父类的生成顺序关系?
25.两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
26.float f=3.4这个表达式是否正确?
27.char a='晕';char能不能存放一个中文?为什么
28.instanceof是什么东东? if(ib1 instanceof InvestBean)
30.当类被加载是,请简述一下类中的静态声明执行顺序
31.面向对象的特点,各有什么特点?
32.String和StringBuffer的区别
33.运行时异常与一般异常有何异同?
34.说出ArrayList,Vector,LinkedList的存储性能和特性
35.Collection和Collections的区别。
36.&和&&的区别。&,|,~,>>,<< ,>>>
37.HashMap和Hashtable的区别。
38.final,finally,finalize的区别。
39.sleep()和wait()有什么区别?
40.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
41.error和exception有什么区别?
41.同步和异步有何异同,在什么情况下分别使用他们?举例说明。
42.abstract class和interface有什么区别?
43.heap和stack有什么区别。
44.StaticNestedClass和InnerClass的不同。
45.GC是什么?为什么要有GC?
46.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
47.Java有没有goto?
48.启动一个线程是用run()还是start()?
49.给我一个你最常见到的runtimeexception。
50.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?
51.List,Set,Map是否继承自Collection接口?
52.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
53.数组有没有length()这个方法?String有没有length()这个方法?
54.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
55.构造器Constructor是否可被override?
56.是否可以继承String类?
57.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
58.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
59.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
60.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
61.编程题:写一个Singleton出来。
63.Java中的异常处理机制的简单原理和应用。
64.垃圾回收的优点和原理。并考虑2种回收机制。
65.请说出你所知道的线程同步的方法。
66.你所知道的集合类都有哪些?主要方法?
67.描述一下JVM加载class文件的原理机制?
68.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
69.线程的基本概念、线程的基本状态以及状态之间的关系
70.简述位操作(&,|,^)与逻辑操作(&&,||)的区别。
71.简述synchronized和java.util.concurrent.locks.Lock的异同?
72.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
73.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
74.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?
75.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
76.java中会存在内存泄漏吗,请简单描述。
77.java中实现多态的机制是什么?
78.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
79.静态变量和实例变量的区别?
80.什么是java序列化,如何实现java序列化?
81.在JAVA中,如何跳出当前的多重嵌套循环?
82.List、Map、Set三个接口,存取元素时,各有什么特点?
83.说出一些常用的类,包,接口,请各举5个
84.谈谈final, finally, finalize的区别
85.String和StringBuffer 的区别
86.socket通信的原理。

posted @ 2017-07-08 13:56  hdsfakjhf  阅读(158)  评论(0编辑  收藏  举报