1.hashmap的数据结构:数组+链表
2.B继承A new B会:
one:把A的静态的执行完 执行B的静态的
two:再执行A的初始化代码块,构造函数
three:再执行B的初始代码块,构造函数
3.ThreadLocal是采用哈希表的方式为每个线程都提供一个变量的副本,保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏。
4。静态内部类不能直接访问外部类的非静态成员,但是可以同构new外部类().成员访问。
5.java的反射机制主要提供:
在运行时判断一个对象所属的类
在运行时构造一个类的对象
在运行时判断一个类具有的成员变量和方法
在运行时掉用一个对象的方法。
5.放射和普通new产生对象的区别
普通的java对象时通过new关键字把对应类的字节码的文件加载到内存,然后创建该对象的。
放射是通过一个Class的特殊类,用Class.forname(“Class.name”);得到类的字节码对象,然后用newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数),也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能操作,
6.Swing组件:JTextFild输入单行文本,JTextArea输入多行文本,JButton显示按钮,JLabel提示信息。
8.被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只有该方法内有效看,所以static不能修饰局部变量。
9.Thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
10.JVM内存区:程序计数器,虚拟机栈,本地方法栈,堆,方法区(包括常量池)。不属于JVM的内存区:直接内存,用户I/O操作。
11.finaly是在return后面的表达式运算后执行的(此时并没有放回运算后的值,而是先把要返回的值保存起来,不管fianlly中代码如何,返回的值也不会改变,除非finaly有return语句才会更新,)所以函数值是在finaly执行前确定的。
12。java.swt:包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面。java.lang:提供java编程语言的程序设计的基础类。 iava.io:包含提供多种输出输入功能的类。java.net:包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET,javal.applet:包含java小应用程序的类。java.util:包含一些实用性的类。
13。子类可以修改父类的可见性,但可见性要大于等于父类(如protect)
14.修饰非静态方法 锁住的是this 对象 ,修饰静态方法 锁住的是class对象。
15.由于构造器的名字必须与类名相同,而匿名类没有类,所以匿名类不能有构造器。
16.如果父类的getclass()方法没哟重写,则返回当前子类的类名,由于是使用getname()方法,所以返回的是包名+类名。
17.IOC的一个重点在系统运行中,动态的向某个对象提供它所需要的其他对象,这一点是通过DI(Dependece Injection,依赖注入)来实现的,它的目的是减少组件之间的耦合度,使开发变得更容易。就比如对象A需要操作数据库,以前我们总是要在A中自己编写代码获得一个Connection对象,有了spring我们只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个connection,然后就像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制,A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A当中的,依赖注入的名字就是这样来的。那么DI是如何是向的呢?Java1.3之后一个重要的特征就是反射(reflection),它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性,执行对象的方法,spring就是通过反射来实现注入的。
18. 类信息、产量、静态变量等数据存储方法区,之后再类加载的时候执行一次,地址一样。
19.实例对象也可以调用静态方法。
20.事务4大特性:
原子性:事务是一组不可分割的操作单元,这组单元要么同时成功,要么同时失败(由事务管理子系统实现)。
一致性:事务前后的数据完整要保持一致(由DBMS的完整性子系统执行测试任务)。
隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统完成)
持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出现异常,都不会影响已提交的事务(由DBMS的恢复性子系统实现)。
21.不管是静态方法还是静态成员都是泪级别的,也就是说随着类的加载而加载,优先于对象的存在,而非静态的成员和方法是对象级别的存在,所以在静态方法中调用非静态的成员或方法(此时还没有存在对象),是不可能的,但是反过来就可以的:非静态的方法中调用静态。于是也就有静态方法中不能使用this和super关键字。
22.。静态变脸会默认赋初值,局部变量和final声明的变量必须手动赋初值。
23.PC寄存器就是程序计数器
24.
this关键字代表当前类对象。
this用途:
普通的直接引用,作为方法的参数,返回值
解决局部变量和成员变量的二义性
在本类之间,构造方法之间的相互调用
super用途:
super表示超(父)类对象,this表示对象本身
super可用于访问父类的方法和属性,使用形式为super.方法(属性)
在类的继承中,子类的构造方法中默认会有super()语句存在(默认隐藏)
调用父类构造方法时,必须位于第一行(和this不能同时存在于构造方法中)
25.Object中包含的方法:
clone()创建并返回次对象的一个副本,
equals()知识其他某个对象是否与次对象“”相等“”;
finalize()当垃圾回收器确定不会存在该对象更多引用是,有对象的垃圾回收器调用此方法,
getClass()放回次Object的运行时类
,notify():唤醒在次对象监视器上等待的单个线程
,notifyAll(),唤醒在次对象监视器上等待的单个线程
hasCode()返回该对象的哈希码值
,toString(),返回该对象的字符串表示
wait().当前线程等待。
26.synchronized不是修饰变量的,它修饰方法或代码块或对象。
27.数组引用类型的变量的默认值为null,当每个数组变量的实例后,如果没有显示的为每个元素赋值,Java就会把该数组的所有元素初始化相应的类型的默认值。int的默认值为0.
28.byte 类型的变量在做运算时会转换为int类型的值,但是使用a+=b;则会将被赋值的变量自动强制装换为相应的类型。
29.在函数中定义的变量不能与其所在的函数的形参同名。
20.后缀是stream的都是字节流,其他都是字符流。
21.字符流=字节流+编码集
22.JVM的底层实现是用C、C++和汇编写的,其他组件都是用java写的。
23.int与int:肯定true,
int与Interger比较,Interger会自动拆箱,==和equals都是true.
int 与new Integer比较,也是自动拆箱。
Integer与Integer比较,由于直接复制的话会进行自动的装箱。所以当值在【-128,127】中的时候,由于值缓存在IntegerCach中,那么当赋值在这个区间时,不会创建新的Integer对象,而是直接从缓存中获取已经创建好的Integer对象。而当大于这个区间的时候,会直接new Interger. 所以当在这个区间进行==时是true,当Integer之间进行equals()方法比较是,由于重写了这个方法,所以比较的是内容,所以true。
Integer和new Integer:new Integer会创建对象,会存储在堆区,而Integer在【-128,127】中,从缓存中取,否则会new Integer.所以Integer与new Integer进行==比较的话,肯定是false,Integer与new Integer()进行equals()比较的时候肯定为true.原因是new 的时候,会在堆中创建对象,分配的地址不同.==比较的是内存地址,所以肯定不同,装箱的过程是同过调用包装器的valueof()方法实现的.拆箱过程是通过调用包装器的xxxvalue方法实现的。
24.BOM(l浏览器的内置对象管理模型)中的History属性和方法
length 返回浏览器历史李彪中URL数量
back()加载history列表找那个的前一个的URL。
forward():加载history列表中的下一个URL
go():加载history列表中的某个具体页面。
25.ceil:大于等于x,并且与它最接近的整数。floor:小于等于x,,且与x最接近的整数。