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基础提高篇的主要内容,如果未能解决你的问题,请参考以下文章
[网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法