Java和Scala学习日记9

1.private static final long serialVersionUID = 4292036045536957058L;
解析:serialVersionUID用来表明实现序列化类的不同版本间的兼容性。如果修改了此类,要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

2.hashcode
解析:
(1)如果两个对象相同,那么它们的hashCode值一定相同。
(2)如果两个对象的hashCode相同,它们并不一定相同。
(3)两个对象不相同,它们的hashCode值不一定不相同。
(4)两个对象的hashCode值不相同,它们一定是两个不同的对象。
hashCode()具体实现为:

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

这段代码是s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]数字表达式的实现。s[i]是字符串的第i个字符,n是字符串的长度。下面举个例子:

public class DemoHashCode {
    public static void main(String[] args) {
        String a = new String("aw");
        String b = new String("aw");
        String c= "aw";
        String d= "aw";
        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
        System.out.println(c.hashCode());
        System.out.println(d.hashCode());
        System.out.println(a==b);//false
        System.out.println(c==d);//true
    }
}

结果输出如下:

3126
3126
3126
3126
false
true

3.Java中的Character类
解析:Character类用于对单个字符进行操作。Character类在对象中包装一个基本类型char的值。

4.@BeforeClass、@AfterClass、@Before、@After、@Test区别
解析:
(1)@BeforeClass:表示在类中的任意public static void方法执行之前执行。
(2)@AfterClass:表示在类中的任意public static void方法执行之后执行。
(3)@Before:表示在任意使用@Test注解标注的public void方法执行之前执行。
(4)@After:表示在任意使用@Test注解标注的public void方法执行之后执行。
(5)@Test:使用该注解标注的public void方法会表示为一个测试方法。

5.Jython实现机制
解析:Jython的目的是让Python模块运行在JVM上,这样就可以在Java中调用Python库函数了。jython xxx.py执行过程为:
(1)首先调用Java版本的Python(Jython),即jython.jar去解析Python。
(2)然后转换成Java所支持的字节码。
(3)最终调用Java中的JVM去执行Python代码。

6.Java调用Python方法
解析:
(1)在Java类中直接执行Python语句。
(2)在Java中调用本机Python脚本中的函数。
(3)使用Java直接执行Python脚本。

7.Java中的Properties类
解析:Java中的Properties(Java.util.Properties)类主要用于读取Java的配置文件,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的形式,文本注释信息可以用“#”来注释。

8.InputStream,InputStreamReader和BufferedReader区别
解析:
(1)InputStream和OutputStream
处理字节流的抽象类。InputStream是字节输入流的所有类的超类,一般使用它的子类,比如FileInputStream等;OutputStream是字节输出流的所有类的超类,一般使用它的子类,比如FileOutputStream等。
(2)InputStreamReader和OutputStreamWriter
处理字符流的抽象类。InputStreamReader是字节流通向字符流的桥梁,它将字节流转换为字符流;OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流。
(3)BufferedReader和BufferedWriter
BufferedReader由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取;BufferedWriter由Writer类扩展而来,提供通用的缓冲方式文本写入,newLine使用平台自己的行分隔符,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/80916688
今日推荐