public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");//-128
add(b);
System.out.print(b + "");//127
}
}
包装类
包装类的值都是Final不变的,对于++b或b++,新建对象把引用传给原对象句柄,在函数中操作,只是形参的临时句柄改变了指向,实参的句柄还是指向原来的对象
管道
-
普通管道(PIPE):通常有两种限制,一是单工,即只能单向传输;二是血缘,即常用于父子进程间(或有血缘关系的进程间)。
-
流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。
-
命名管道(name_pipe):去除了上述的第二种限制,实现了无血缘关系的不同进程间通信。
对于不同的服务器之间的通信,是要要求全双工形式的,而管道只能是半双工,虽然可以双向,但是同一时间只能有一个方向传输
字符串常量池和JVM运行时数据区
- 字符串常量池:JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存
- 工作原理:当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。
###JDK classLoader
JDK中提供了三个ClassLoader,根据层级从高到低为:
Bootstrap ClassLoader,主要加载JVM自身工作需要的类。
Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。
Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值
JVM加载类的实现方式,我们称为 双亲委托模型,判断两个类是否相同:一是类的全称;另一个是类加载器
接口和抽象类的区别
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
3.抽象类中可以有普通成员变量,接口中没有普通成员变量
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型
7. 一个类可以实现多个接口,但只能继承一个抽象类。
java中native
JNI
java调用非java代码的接口
Java的反射机制
反射机制:在运行状态中,任意一个类知道这个类的所有属性和方法;任意一个对象都能调用它的任意方法和属性,动态获取信息及动态调用对象方法。
java.lang.reflect包中,常用的类有Contructor、Filed、Method;类等,AccessibleObject类是这三个类的基类。
- 获得class的方式:
- 根据类名:类名.class
- 根据对象:对象.getClass();
- 根据全限定类对象:Class.forName(全限定类名)
Object 类
hashCode()、equals()、clone()、toString()、getClass()