码迷,mamicode.com
首页 > 其他好文 > 详细

2015-04-11一些知识点

时间:2015-04-11 10:12:51      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

  1、一个小程序,关于Java值传递和引用传递的:

package com.lk.B;

public class Test1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test1 t = new Test1();
        t.first();
    }
    public void first(){
        int i = 5;
        Value v = new Value();
        v.i = 25;
        second(v,i);
        System.out.println(v.i);
    }
    public void second(Value v , int i){
        i = 0;
        v.i = 20;
        Value val = new Value();
        v = val;
        System.out.println(v.i+" "+i);
    }
}

class Value{
    public int i = 15;
}

  2、RandomAccellFile是比较不寻常的类,它直接继承与Object,它并不属于Streams结构的一部分。

  3、Java编程思想里面有个关于值传递和引用传递的经典的解释:如果Java是传值,那么传递的是值的副本;如果Java是传引用,那么传递时引用的副本。

      即不管Java参数的类型是什么,一律传递参数的副本。

      下面有三个例子:

package com.lk.B;

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        boolean test = true;
        System.out.println(test);
        test(test);
        System.out.println(test);
    }
    public static void test(boolean test){
        test = !test;
        System.out.println(test);
    }

}
true
false
true
package com.lk.B;

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StringBuffer sb = new StringBuffer("Hello");
        System.out.println(sb);
        test(sb);
        System.out.println(sb);
    }
    public static void test(StringBuffer sb){
        sb.append(",World!");
    }

}
Hello
Hello,World!
package com.lk.B;

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s = "Hello";
        System.out.println(s);
        test(s);
        System.out.println(s);
    }
    public static void test(String s){
        s = "World";
    }

}
Hello
Hello

  对于String类型,String类是final的,因此,不能继承和修改这个类。是s = “World”是隐含地让Java生成一个新的String对象。既然对象都是新的,那就和原来的“Hello”没有任何关系。当函数结束,s作用消失,原来的内存地址上的内容未加改变,所以打印的结果仍然是Hello。

  4、当读取的问价是一个比较大的文本文件(很多字节数的文本文件),那么就要考虑到BufferedReader这个类。

       new BufferedReader(new InputStreamReader(new FileInputStream("file.name")));

  5、一个字符串写入文件的例子:

package com.lk.B;

import java.io.FileOutputStream;
import java.io.IOException;

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("FileName.txt");
            fos.write("字符串写入文件".getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            try {
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

  6、看到一个判断是一个数是不是2的阶次方数。

      一个非常机智的算法:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干个0.比如8就是1000,64就是1000000.如果将这个数减1,再与该数做和(&)运算,则应该全为0.(例如:8与7,一个二进制数是1000,一个二进制数是111,它们做和运算后全为0)。所以((d-1)&d)==0。

package com.lk.B;

public class Test3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a = 256;//2,4,8,16,32,64,128,256...
        System.out.println((a-1)&a);//输出0
    }

}

 

2015-04-11一些知识点

标签:

原文地址:http://www.cnblogs.com/luankun0214/p/4416198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!