- java中有三种移为运算符
- <<:左移运算符,num<<1,相当于num除以2
- >>:右移运算符,num>>1,相当于num乘以2
- >>>:无符号右移,忽略符号位,空位都以0补齐
- 泛型
- 创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。
- JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。 总结:泛型代码与JVM ① 虚拟机中没有泛型,只有普通类和方法。 ② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) ③ 在继承泛型类型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。 无论我们如何定义一个泛型类型,相应的都会有一个原始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。
- 参数传递
- 基本类型变量:传递值的副本(副本变,本身不变)
- 对象变量:传递引用的副本(副本变,本身也变)【即复制指向地址的指针】
- 不论Java参数的类型是什么,一律传递的都是参数的副本
- Java鲁棒性的特点如下:
- Java在编译和运行程序时都要对可能出现的问题进行检查,以防止错误的产生;
- Java编译器可以查出许多其他语言运行时才能发现的错误;
- Java不支持指针操作,大大减少了错误发生的可能性;
- Java具有异常处理的功能,当程序异常时,它能捕获并响应意外情况,以保证程序能稳妥地结束,计算机系统不会崩溃;而Java能运行虚拟机实现跨平台是Java的与平台无关性的特点。
- JRE与JDK
- JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境
- JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack
- java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:
- 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
- 如果内存确实很紧张,调用System.gc() 方法来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。
- 方法重载与返回值无关,只与参数个数,类型有关
- this可以让构造方法互相调用,但是调用参构造方法的语句,必须出现在构造方法的首行
- this()调用本类无参构造
- this(******)调用本类有参构造
- java.exe——java虚拟机,执行编译好的.class文件
- javac.exe——编译.java文件
- javadoc.exe——java document生成java说明文档
- javaprof.exe——java profile剖析工具
- jdb.exe——java debug调试器
- 互斥与同步
- 互斥:是通过竞争对资源的独占使用,彼此之间不需要知道对方的存在,执行顺序是一个乱序(如:多个面试者竞争同一个岗位)
- 同步:是协调多个线程相互关联的线程合作完成任务,彼此知道对方的存在,执行顺序往往有序(如:班上竞选班委)
- 线程同步方式有:临界区、互斥区、信号量、事件
- Object类方法:
- Object() 构造方法
- getClass()
- hasCode()
- equals(Object)
- clone()
- toString()
- notify()
- notifyAll()
- wait(long)
- wait()
- finalize()
- java里面JVM的机制在调用函数的时候仍然是进栈和出栈,所以极易导致栈内存溢出
错误类型 java.lang.StackOverflowError错误