1.java标识符以字母,下划线_,美元符号$开头,后面可以是任何字母、数字、美元符号或下划线。Java 中标识符是为方法、变量或其他用户定义项所定义的名称,不能是关键字.
2.泛型的创建是为了编译器检查出错误,只在编译阶段被处理成了普通类和方法,在运行阶段会被擦除,在处理泛型类型时,会有一个原始类型被自动提供,原始类型的名字就是擦除类型参数的泛型类型的名字.(如果没有jvm会默认为object类型)
3.CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement
4.Arrays.asList(),将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。
1)此方法只适用于对象数组比如String[],Integer[]
2)进行了指向绑定,改变任何一方,其他都会改变
3)对基本类型数组有bug,它会将整个数组放进list里
4)不能用此list进行添加删除操作,里面父类添加,删除,方法就是抛出异常,只能用来遍历使用
5.每创建一次类都会分配一批内存区域(但类加载只有一次),静态成员属于类成员,在方法区(静态存储区:线程共享)分配内存
java7之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变,java7中,static变量从永久代移到堆中;
java8中,取消永久代,方法区存放于元空间(Metaspace),元空间仍然与堆不相连,但与堆共享物理内存,逻辑上可认为在堆中
7.stringBuffer是线程安全的,因为方法都是用sychronized修饰,且里面是用动态数组技术(数组长度随着内容而变化),stringBuffer对象指向不变
8.Hashtable 线程安全,不支持key和value为空,Hashmap 非线程安全,支持key和value为空,ConcurrentHashMap为线程安全的,key值不能重复,但value可以
9.在方法的参数引用传递上,由于String是不可变类,所以它传的是引用的拷贝.函数改变不改变原引用.
10.this(),super()默认放在第一行,且不能同时出现,因为this()里面默认有super()方法.
11.abstart不能和private,final,static混用,抽象方法必须在抽象类和接口中.
1)private:修饰的方法,子类不能实现和继承
2)final:用于方法前,不能被重写,用于类前不能被继承,
3)static:因为abstart修饰的方法没有方法体,不能直接调用,修饰的类不能被创建
12.byte boolean(可能)占1字节 char short占两字节,int float占四字节,long double占8字节.
1)float:为8位有效数字(3.14为三位有效数字),会将第九位四舍五入到第八位
2)double:为16位有效数字,且小数默认为double类型的
3)一个字节8位,8个字节64位,一个十进制树4位二进制你表示,也就是说8个字节为16位有效数字
13.byte,int,short在计算时,会先自动提升为int类型(32位),对于32位的处理器来说,这样JVM的速度就会更快,像高于32位的数据类型,也就是64位的数据,会分为两个32位进行执行.
14.sleep必须捕获异常,且sleep方法不释放锁,而wait,notify和notifyAll不需要捕获异常
1)sleep方法为线程类的
2)wait,notify和notifyAll方法为object的,因为还拿取对象锁和释放对象锁
15.
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
16.当前用户上下文信息:session,appication:当前应用,pageContext:当前页面,request:当前请求
17.实现接口,访问修饰符不能缩小,返回值类型不能扩大,抛出异常类型也不能扩大,满足条件下,方法头(static final等其他修饰符)可以不完全一样.
18.堆区只存放类对象,线程共享;栈存放局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;class文件和静态数据放在方法区,线程共享.
19.final修饰引用类型变量(变量存储在堆区的),引用不变,但引用指向的地址对象的内容可变.
1)修饰基础类型的确实是不可变的,但前提是修饰的是引用类型的变量
20.goto和const是保留字也是关键字,且false,true是编译器赋予特定含义的,但并不是关键字,且sizeof是c++的
21.面向过程比面向对象的性能好,但面向对象具有封装,继承和多态特性,所以易维护,易复用,易扩展,更容易设计出低耦合的系统.
1)比如说c语言
22.类的加载包括:加载,验证,准备,解析,初始化:
1)加载:生成Class对象作为方法区这个类的各种数据的访问入口.
2)验证:为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求
3)准备:正式为类变量分配内存并设置类变量默认初始值
4)解析:解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程
5)初始化:执行(构造)方法的类变量的赋值动作和静态语句块static{}中的语句,对类变量进行二次赋值.
23.ArrayList是通过数组实现的,可直接通过数组下标查询元素,所以查询快,而增删需要移动 后面的所有元素
24.LinkedList是通过链表实现的,查询得通过指针next()一个一个找,所以查询慢,而增删只需改下指针地址即可,所以增删块
25.区分两数组的访问速度还得分用什么方式访问,用迭代器差不多,用下标ArrayList快.
26.在java中原生类就指基本数据类型.
27.String类是不可变类指的是引用指向的内容不可变,但引用指向可变.
28.Aop:Aspected Oriented Programming:面向方面编程,将逻辑相同的模块分离出来(比如日志模块),降低代码耦合度
29.接口可以多继承的原因是,接口里的方法都是抽象方法,所以作为父类的话,不会产生调用冲突
30.java传参只有值传递(也就是把实参的值拷贝给形参,这个值可以是普通的数值,也可以是地址值)
31.所以String作为参数传递时,形参引用接收了实参引用的值,都指向了String对象,但由于String对象的不可变性,形式参数会进行(引用拷贝生成新的对象)用.
32.但当其他引用类型对象作为参数时,形参引用也接收了实参引用的值,也指向了该对象,所以在方法中对象的改变,会影响堆内存中原对象的改变.
33.计算机存储二进制数的存储格式为补码存储,-0的补码给-128表示了,解释如下
1)在计算过程中需将数据先表示为反码,然后转补码进行计算
2)计算过程中符号号也要进行计算的,如果溢出则截去最高位
例如:
-127 - 1 = -128 10000001 + 11111111 = 10000000
1 - 1 = 0 00000001 + 11111111 = 00000000(溢出了,需要在写程序的时候注意的地方)
1 + 127 = -128 00000001 + 01111111 = 10000000
-1 -128 = 127 11111111 + 10000000 = 01111111 (溢出了,需要在写程序的时候注意的地方)
注意啊:最小的数减1变成了最大的数;最大的数加一变成了最小的数。
34.但当拿到一个负数补码时,可以直接通过反补运算得到原码,因为补码的补码就是原码.
当拿到一个负数(十进制数时,则需先把它转换成补码,进行计算)
当进行计算结果为负数补码时,则需把它转换成原码才是结果
35.补码为1 0000 000时,原码为1 0000 0000,但是由于8位的原码无法表示,所以为原码为0000 0000,但由于0000 0000补码的原码也为0000 0000,比较浪费,所以用来表示-128(在java中的补码表示为1 0000 000,虽然原码表示为-0)因为计算机没有-0和0之分所以用来表示-128了.
36.服务器内部跳转不改变地址栏的地址.
37.Integer中只有Valueof()是把String类型转换成Integer对象类型.
38.StringBuffer类没有重写object的equals方法,所以它们比较的是StringBuffer对象地址
39.Synchronized用于线程间的数据隔离,而ThreadLocal则用于线程间的数据共享。
40.ThreadLocal继承自Object(没有实现任何接口)中定义了一个哈希表用于为每个线程都提供一个变量的副本,它作为Thread线程的局部变量,为线程提供了独立的数据进行修改.