码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础提高篇

时间:2016-02-24 17:30:06      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

一、Java中的四舍五入

public static void test(){
        System.out.println(Math.round(12.5d));
        System.out.println(Math.round(-12.5d));
        //使用银行家算法
         BigDecimal d=new BigDecimal(100000);
        BigDecimal r=new BigDecimal(0.0187*3);
        BigDecimal i=d.multiply(r).setScale(2,RoundingMode.HALF_EVEN);
        System.out.println(i);
}

运行结果如下:

13
-12
5610.00

二、Java的深拷贝与浅拷贝

类实现Cloneable接口之后实现object中的clone方法,super.clone()实现拷贝。但会发现只拷贝了基本类型。

拷贝规则如下:

1.如变量是基本类型,拷贝其值。

2.对象拷贝其地址引用

浅拷贝不利于对象的使用,要想让对象新创建一个的解决办法可以在clone方法中新new一个对象。

使用序列化实现对象的拷贝:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class CloneUtil {
    //该工具的对象必须实现Serializable接口
    public static <T extends Serializable> T clone(T obj){
        T cloneObj=null;
        try {
            //写入字节流
              ByteArrayOutputStream out=new ByteArrayOutputStream();
            ObjectOutputStream obs=new ObjectOutputStream(out);
            obs.writeObject(obj);
            obs.close();
            
            //分配内存,写入原始对象,生成新对象
              ByteArrayInputStream ios=new ByteArrayInputStream(out.toByteArray());
            ObjectInputStream ois=new ObjectInputStream(ios);
            //返回生成的新对象
              cloneObj=(T)ois.readObject();
            ois.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return cloneObj;
    } 
}

三、static代表这什么?

Java把内存分为栈内存和堆内存,其中栈内存存放一些基本类型的变量、数组和对象的引用,堆内存主要存放一些对象,当类加载的时候JVM会为static修饰的变量、方法开辟一段内存空间,所有对象调用修改都会对其他对象内的变量造成修改。只会为他分配一次内存空间。

static的局限:

1.只能调用static变量

2.只能调用static方法

3.不能以任何形式引用super,this

4.static变量必须初始化,并且初始化时间必须早于非静态变量

四、内部类

实例化内部类:

外部类 变量名=new 外部类();

外部类.内部类 变量名=外部类变量名.new.内部类();

五、equals重写

public boolean equals(Object obj) {
        if(this==obj){
            return true;
        }
        if(obj instanceof Test){
            //判断里面的变量自己定义规则等是否相等,相等则返回true
        }
        return false;
}

应该使用getclass,因为instanceof 继承关系也返回true

public boolean equals(Object obj) {
        if(this==obj){
            return true;
        }
        if(obj!=null&&obj.getClass() == this.getClass()){
            //判断里面的变量自己定义规则等是否相等,相等则返回true
        }
        return false;
}

待续…

Java基础提高篇

标签:

原文地址:http://www.cnblogs.com/objectjava/p/5213419.html

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