Java基础提高篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础提高篇相关的知识,希望对你有一定的参考价值。

一、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基础提高篇的主要内容,如果未能解决你的问题,请参考以下文章

Java自用基础编程篇-4.面向对象(中)

java提高篇-----代码块

[网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法

Java提高篇之理解java的三大特性——继承

Java提高篇——equals()与hashCode()方法详解

Java提高篇——equals()与hashCode()方法详解