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;
}

待续…

时间: 2024-07-29 04:33:07

Java基础提高篇的相关文章

java基础提高篇&mdash;&mdash;对象的创建

我一直使用构造器的方式生成或者初始化对象.最近发现一些对象在项目中并没有实际作用,有时我只是需要它的一些功能,为此新建一个对象是不是比较消耗资源,影响程序的性能呢.今天看到一些资料,对这个问题作出了一个回答. 说明: 首先肯定的是,我们有时候并不需要一个类的全部功能,或许我们需要的只是其中的一两个方法,没必要为此新建一个类.静态方法解决了这个问题.静态方法应该成为每个面向对象设计程序者必修课程.首先我们学习静态方法创建对象. 使用静态工厂的方式产生对象的好处有这样几个好处:"一:静态方法都有名字

java基础进阶篇(六)_HashTable------【java源码栈】

一.概述 ??前面介绍了HashMap的结构和原理,这里介绍个类似HashMap的结构Hashtable. ??HashTable 官方解释是HashMap的轻量级实现, 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. ??所以我们结合HashMap来介绍HashTable, 比较下两者的区别. ??HashTable 使用的很少, 它支持线程安全, 通过内部方法加上 synchronized 实现, 因此同步锁的密度太大了, 在实际情

java基础进阶篇(七)_LinkedHashMap------【java源码栈】

目录 一.概述 二.特点 三.应用场合 四.构造方法 1.参数为空 2.accessOrder 五.源码结构分析 六.常见问题 1.如何实现的元素有序? 2.如何保证顺序的正确以及同步 3.如何实现两种顺序(插入顺序或者访问顺序)? 4.为什么重写containsValue()而不重写containsKey()? 七.常用方法 一.概述 ??LinkedHashMap是HashMap的子类,关于HashMap可以看下前面的章节:java基础进阶篇 HashMap public class Lin

Java基础总结篇--JavaSE你必须要知道的基础

01.Java概述与语法 作者: 风离紫竹 java发展概述 一. Java由SUN公司研发,SUN 被 Oracle 收购 Java 由1995年发布,正式版本由1996年1月发布(jdk1.0) Java之父: James Gosling 二. 面向对象 分布式 多线程 简单化 安全 跨平台移植  ------    JVM   Java Virtual Machine Java虚拟机 三. JavaSE  Java Standard Edition : Java标准版本 JavaEE Ja

java基础学习篇01

从事了java2年开发,后来发现自己除了在网上抄袭代码之外就一无是处了,还没有在学校培训的时候那样子还愿意花时间去研究新技术,连最基础不常用的都快忘记了. 所以开始重新从最基础的开始回顾一遍,写一些博客来记录自己的学习过程. java基础语法 1.输出错误与调试信息 System类是一个用final修饰的一个类,不能被继承,没有子类.不能被实例化,因为构造方法是私有的. 包名:java.lang 帮助文档对包的描述是:提供对java编程语言的设计基础课. 全限定类名:java.lang.Obje

jAVA基础 提高文件复制性能之多线程复制文件

利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小及需求而定.其大概原理是根据给定的线程个数,将文件分段,每个线程负责的数据大小=文件长度/线程个数,将不能除尽的部分留给最后一段文件所分配的线程处理.以下是实现代码及自己理解的注释,多有偏差请见谅.下面是兄弟连java培训总结的一些代码:供参考. 程序实现类代码: import java.io.Ra

Java基础-多线程篇

1. 多线程基础 想要设计一个程序,边打游戏边听歌,怎么设计? 要解决上述问题,得使用多进程或者多线程来解决. 1.1 并发和并行 并发:指两个或多个事件在同一个时间段内发生 (交替执行). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每 一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的. 并行:指两个或多个事件在同一时刻发生(同时发生). 而在多个 CPU 系

Java基础知识篇

1.&和&&的区别? 答:&和&&都可以用作逻辑与的运算符,表示逻辑与(and): &&还有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式: &是位运算符,表示按位与运算. 2.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 答:switch(expr1)中,expr1是一个整数表达式.整数表达式可以是int基本类型或Integer包装类型, 由于,byte,short,c

【Java入门提高篇】Day5 Java中的回调(二)

Java中有很多个Timer,常用的有两个Timer类,一个java.util包下的Timer,一个是javax.swing包下的Timer,两个Timer类都有用到回调机制.可以使用它在到达指定时间间隔后发出通知,例如程序中有一个时钟,就可以每秒请求发送一个通知,以便更新时间显示.那么怎样通知Timer去完成我们的任务呢?在其他语言中,可以提供一个函数名,然后定时器周期性的调用它,但Java使用的是面向对象编程的思想,将某个类的对象传递给定时器,然后定时器再调用这个对象的方法,由于对象能携带的