Java (理论)

1、栈和栈堆关系

栈(stack)又名堆栈,只是换了个抽象的名字。

2、内存分配及变量存储位置 

寄存器、堆栈、堆、静态域、常量池、非RAM存储

3、hash

Hash是散列的意思,就是把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值。即hashCode(有可能重复),需要equal()方法来辅助确定一个对象。

1)如果散列表中存在和散列原始输入K相等的记录,那么K必定在f(K)的存储位置上

2)不同关键字经过散列算法变换后可能得到同一个散列地址,这种现象称为碰撞

3)如果两个Hash值不同(前提是同一Hash算法),那么这两个Hash值对应的原始输入必定不同

判断时,先根据hashCode值找到hash表中这个位置的所有对象,再通过equal()来确定唯一的对象

使用hashCode是为了避免对每个对象的判断,减少判断次数

https://blog.csdn.net/zhangyuan19880606/article/details/51240372

https://www.cnblogs.com/whgk/p/6071617.html

4、static

初始化只会执行一次,一个类的所有实例共享同一份静态内容,可以直接通过类名点出来。

5、final

final修饰类时,表明这个类不能被继承;基本数据类型final变量,数值不能更改;引用类型的final变量,引用不能改变。

6、整数默认int类型,浮点数默认double类型,单引号代表char类型,双引号String类型

数值太长可以加下划线来更具可读性如:10_000_000

单引号引的数据 是char类型的,单引号只能引一个字符(表示单个字符)
双引号引的数据 是String类型的,而双引号可以引0个及其以上(引用字符串)

7、switch支持的数据类型?

expr可以是byte、short、char、int、enum、String类型,但是long类型不能

8、StringBuilder 、StringBuffer、 String

运行速度快慢为:StringBuilder > StringBuffer > String

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:适用于少量的字符串操作的情况

StringBuilder:适用於单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

9、为什么重写toString方法

不重写toString方法,当Object对象去调用toString时,输出的是该对象的hash码如:com.spdb.com.TableInfo@ea23517

重写完就能按你想要的输出如:TableInfo{TableID='0101', TableName='101桌', TableState=0}

10、String重写了 equals() 方法变成了比较字符串内容,== 依然是比较两个字符串是否为同一对象,比较的是引用地址

 public static void main(String[] args) {
 
        //往字符串常量池添加一个hello,如果存在就不添加,并指向常量池的hello
        String str1 = "hello";
 
        //第一步,往字符串常量池添加一个hello,如果存在就不添加
        //第二步,往堆里新建一个hello,堆里可重复添加,并指向堆刚才新建的hello
        String str2 = new String("hello");
    }
public static void main(String[] args) {
        String str1 = new String("hello");
        String str2 = new String("hello");
 
        //一共会产生三个hello,一个在字符串常量池,两个new hello在堆里
        System.out.println(str1.equals(str2));   //true 字符串内容相同
        System.out.println(str1 == str2);        // false 在堆里是两个对象
    }
equalsIgnoreCase()忽略大小写的equals方法

trim()去掉字符串两端空格

11、常量池 

String pool,所有String都存在常量池中,new String(“xx”)指向的是堆的引用,指向常量池相同的字符串,引用相同。

Integer pool,在Integer(0-127)都是存在一个常量池中的,(不包含new Integer(xx)初始化),所以他们的引用也是相同的。

12、StringUtils.isBlank   (org.apache.commons.lang3.StringUtils 的包)

isEmpty 没有忽略空格参数,是以是否为空和是否存在为判断依据。

isBlank 是在 isEmpty 的基础上进行了为空(字符串都为空格、制表符、tab 的情况)的判断。(一般更为常用)

13、抽象类abstract,凡是实现类必须要完整的重写所有的方法。(实现类!)部分不重写的话子类只能也是抽象类,直至所有抽象方法被全部重写为止。

15、Serializable接口中什么方法变量都没有,只是用来标记可以序列化的功能,一个类要实现序列化必须实现Serializable接口,没有任何方法需要实现.。

16、关键字instanceof

instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。

17、javaBean

通常有Session bean,Entity bean(实体类),MessageDrivenBean三大类。

 规范:
  1. 必须要有一个默认构造器
  2. 提供get/set方法,如果只有get方法,那么这个属性是只读属性!
  3. 属性:有get/set方法的成员,还可以没有成员,只有get/set方法。属性名称由get/set方法来决定!而不是成员名称!
  4. 方法名称满足一定的规范,那么它就是属性!boolean类型的属性,它的读方法可以是is开头,也可以是get开头!

https://www.cnblogs.com/xdp-gacl/p/3871730.html

18、重定向

response.sendRedirect("游览器的访问路径"); 

重定向的路径是游览器的访问路径。(重定向就是游览器发起新的一个请求)

19、转发

转发后还是同一个请求域相同,只是将response交给别人响应,转发forward是留头不留体,留响应头不留响应体(指response,而request还是共享的)。

RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");//得到转发器
qr.forward(request, response);//转发

20、// TODO Auto-generated catch block 

标记需要处理的地方,Eclipse有个面板叫做Tasks(可以在Window->Show View->Tasks中打开这个面板),显示项目前100个Tasks的标签名,你点击后就会到那个位置去。

21、将Java文件编译为class文件

通过命令行 cd进入到Java文件目录下,输入javac Testjava.java回车;即可会在当前目录生成Testjava.class文件;

22、虚方法

可以被重写的方法都可以称作虚方法,因此虚方法并不需要做特殊的声明,也可以理解为除了用static、final、private修饰之外的所有方法都是虚方法。

java中没有virtual这个关键字,virtual是C++中用来声明虚函数时用的.  C++中用虚函数来表现多态性

23、运算

%取余数 / 除号

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章