
java
yogima
邮箱:yogima@qq.com
展开
-
InputStream转byte[]
InputStream转byte[]其实直接使用IOUtils就可以了,但是需要注意的是,将InputStream粗暴地转成byte[],只适用于文件较小的时候,当如果文件有好几个G,再这样转,内存就要溢出了。原创 2022-12-30 20:09:24 · 22538 阅读 · 0 评论 -
Java中long的表达式问题
今天在代码里发现了有个抛错,是由下面这段分片上传时定位的代码捕获的。第一想法是是不是由于包太大(6.4G)导致long的offset超限。虽然long好像没有这么短…然后查了下long的最大值Long.MAX_VALUE=2的63次方-1,而这里只是并没有超出这个值,只是超出了int的最大值Integer.MAX_VALUE= 2的31次方-1,就觉得很奇怪,所以写了个Test试了下RandomAccessFile accessTmpFile = null;try { accessTmpFile原创 2021-09-08 11:07:41 · 840 阅读 · 0 评论 -
记一个内存泄漏问题:Query Plan Cache BoundedConcurrentHashMap占用堆内存
原因是hibernate会缓存sql语句以减少重复编译,便于直接命中提高效率。这个缓存默认最大值为2G,且在使用in时,只要in后面的参数有任何一个不一样的,就会视为不同的语句而保存下来。解决这个问题可以将缓存最大值改小。我看大家都是这样写的:spring: jpa: properties: hibernate: query: plan_cache_max_size: 64 plan_parameter_metadata_原创 2021-05-18 11:20:52 · 4067 阅读 · 3 评论 -
Java8新特性 Stream简介 stream().filter和stream().map区别
需要使用Stream,首先要使用.stream()或.parallelStream()将集合生成流,其中最常用的是它的filter和map方法,简单写了下,如下:import java.io.*;import java.util.stream.Collectors;import java.util.List;import java.util.ArrayList;class test { public static void main (String[] args) { List<原创 2021-04-28 16:25:19 · 15627 阅读 · 2 评论 -
Java中List的复制 深拷贝和浅拷贝
首先说一下深拷贝和浅拷贝的区别:浅拷贝就是复制出来了一个list,但是它们指向同一地址,所以一旦一个变了,另一个也会跟着改变。深拷贝则不共享地址,不会被对方影响。浅拷贝:深拷贝: List<Integer> oldList = new ArrayList<>();//假设已对oldList赋值 List<Integer> newList = new ArrayList<>(); Collections.addAll(newList, ne原创 2021-04-27 10:42:59 · 3490 阅读 · 2 评论 -
JVM简介及Java的垃圾回收机制(GC)
文章目录一、JVM体系结构1、体系结构简介2、类加载器简介一、JVM体系结构1、体系结构简介JVM体系结构含两个子系统:类加载器、执行引擎。两个组件:运行时数据区、本地接口。相互关系如下图(找的网图,侵删)其中运行时数据区当中的方法区和堆是所有线程共享的数据区,虚拟机栈(java栈)、本地方法栈和程序计数器是线程隔离的数据区。2、类加载器简介类加载器负责加载Java类的字节代码到虚拟机中,具体介绍可参考jvm之java类加载机制和类加载器(ClassLoader)的详解...原创 2020-10-02 14:25:25 · 202 阅读 · 0 评论 -
java图形化得到用户选择的ComboBox的值
用getSelectedItem即可,不需要监听。chara = (String) JCBOperationSelect.getSelectedItem();n = Integer.valueOf((String)JCBNumberOfDigit.getSelectedItem());若写如下代码://这样是不行的,会出现如下问题:无论ComboBox选什么,按开始做题显示的都是一位数加法。可能是原创 2018-01-04 00:16:25 · 5600 阅读 · 0 评论 -
java图形用户界面组件与布局管理——四则运算练习软件界面搭建(FlowLayout、GridBagLayout、Font)
布局管理器 java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,从上到下排列。| BorderLayout(边界布局) 容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。 GridLayout(网格布局) 容器的空间划分成M×N列的网格区域, 每个区域只能原创 2018-01-01 21:21:29 · 1680 阅读 · 0 评论 -
java打开自定义拓展名的文件(比如.his文件)
//一般不能实例化一个Runtime对象,应用程序也不能创建自己的Runtime 类实例,但可以通过getRuntime 方法获取当前Runtime运行时对象的引用。一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。Runtime ce=Runtime.getRuntime();File pFile = new File("四则运算原创 2018-01-05 01:49:50 · 1297 阅读 · 0 评论 -
java中的面向对象(封装、继承和多态)
一些基础1.由于是面向对象的思想,在java中不再像cpp中一样,将其称之为成员函数和数据成员,相对应的叫法是对象的方法和属性。 2.java类中定义的属性叫成员变量,方法中定义的属性叫局部变量。 ①java会自动给成员变量赋一个初始值(一般为0),但不会给局部变量赋初始值,编译时会提醒需要初始化。 ②局部变量和成员变量同名时,局部变量具有更高的优先级。 3.在java中创建对原创 2017-08-29 13:51:27 · 747 阅读 · 1 评论 -
java-文件的写入和读取
File pFile = new File("C:\\desktop\\客户记录");//文件夹pFile.mkdirs();File fileRec = new File(pFile,"customer.txt");//例如需要向customer.txt写入if(!(fileRec.exists())) fileRec.createNewFile();PrintWriter out原创 2018-05-02 19:42:31 · 226 阅读 · 0 评论 -
java-.equals()方法和hashcode()方法(重写)
.equals()方法和hashcode()方法的作用 .equals()方法用于判断该对象是否为同一对象,而默认的判断依据为“在内存中是否为同一位置” hashcode的存在主要是用于查找的便携性,为不同的对象返回不同的整数。例如有0,1,2,3这四个块,有了hashcode就不用一个个按顺序找过去或是二分查找了,可以方便地标记一个对象的存储区块。.equals()方法和hashcode...原创 2018-05-10 20:56:13 · 220 阅读 · 0 评论 -
简易小学生四则运算练习软件(自动出题判题)-java实现
一、主要功能说明二、运行截图三、类的设计(各类之间的关系)四、源代码1. MyExGUI.java2.Operation.java3.Addition.java4.Subtraction.java5.Multiplication.java6.Division.java7.ArithmeticTest8.java一、主要功能说明输入用户名...原创 2018-06-03 00:39:59 · 23469 阅读 · 25 评论 -
eclipse中隐藏不使用的项目(先关闭再隐藏关闭项目)
1.关闭项目往往在一个workspace里面我们会放多个项目,但是当它们都处于开启状态时就会消耗内存,也会使编译时间变长,因此在不开发某些项目的时候,我们就可以把它关闭。选中项目 -> Project -> Close Project2.隐藏关闭项目找到向下的小三角 再找到Filters勾选closed projects再OK,就大功告成啦,会发现左边就看不到被关闭的项目...原创 2019-03-13 22:44:28 · 3422 阅读 · 0 评论 -
java的反射机制
文章目录一、什么是反射二、反射机制的作用三、类名与属性名的获取一、什么是反射JAVA反射机制是在运行状态中,对于任意一个类(指.class文件),都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。简单说起来:获取类的字节码文件(.class),通过该文件对这个类的对象进行获取。二、...原创 2019-07-23 17:15:11 · 139 阅读 · 0 评论 -
一个错误的switch用法示例
需求和说明: chara的值可能是+、-、*、/或混合,要求通过运算不同new不同的对象,(十道计算题),如果是混合,则四种运算随机出题。(tempCh已声明为int chara已声明为String)//这样写是不对的 case 5那边没有break 但是并不会按照重置的tempCh去选择转入Case1/2/3/4 而是自动进入了case 1 然后被break掉 每次都是这样 switch(cha原创 2018-01-03 23:42:55 · 919 阅读 · 0 评论 -
java之断言、测试(JUnit)与调试
断言(assertion)assert 表达式; assert 表达式:信息; 若表达式不为true则程序会产生异常并产生错误信息 例:public Assertion{ public static void main(String[] args){ assert operation(3,4)==5:"算法错误"; } public static dou原创 2017-11-28 14:20:37 · 3872 阅读 · 1 评论 -
java中的字符串
[TOC] 1.String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。 2.不变性。 String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。即用String s5 = new String("I love" + s1);或是s1 = "I love" + s1;指向的内存都是和原来的s1不同的。String s1原创 2017-09-09 16:34:24 · 342 阅读 · 0 评论 -
java中printf的用法
格式: % - 0 m.n l或h 格式字符 %:表示格式说明的起始符号,不可缺少。 -:有-表示左对齐输出,如省略表示右对齐输出。 0:有0表示指定空位填0,如省略表示指定空位不填。 m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。 l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为sh原创 2017-10-18 14:56:46 · 953 阅读 · 0 评论 -
关于Scanner和BufferedReader(待续)
BufferedReader类位于java.io包中。import java.io.*java //实例化键盘输入对象 BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in)); //从键盘输入整数保存在变量answer中 answer=Integer.parseInt(keyboardI原创 2017-10-04 13:35:47 · 351 阅读 · 0 评论 -
java基础语法(顺便回顾cpp语法并比较与java的异同)
变量、关键字与数据类型1.变量名不能以数字开头 也不能有%等符号 但可以有 _和$ 2.Java 语言是一种强类型语言。通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。 3.java是区分大小写的 例如String关键字 S为大写 4.cpp中有的bool类型,在java中为boolean 5.为float变量赋值时数值后面要加f,不加f则前面的数据类型只原创 2017-08-18 19:55:56 · 831 阅读 · 0 评论 -
java中的内部类(嵌套类)
1.内部类:定义在另一个类里面的类 外部类:包含内部类的类 2.内部类的名字不允许与外部类的名字相同。因为在外部引用它时必须给出带有外部类名的完整名称(外部类名.内部类名) 3.内部类可以是抽象类或接口,若是接口,则可以由其他嵌套类实现。 4.嵌套类不要滥用,在图形化中可以使用,其他慎用。内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其原创 2017-11-14 18:49:57 · 1517 阅读 · 0 评论 -
java中的==
1.浮点数最好不直接使用==,因为浮点数是不准确的,比如Double.NAN==Double.NAN的结果是false. 2.boolean无法与int比较。虽然java编译器会把boolean翻译成整数,但是在java语言中是无法比较的。关于String类型的比较,之前在写String 博客的时候有特意提过 其实不仅仅是String类这样 所有的引用类型都是这样的:Integer i = ne原创 2017-11-28 20:36:18 · 396 阅读 · 0 评论 -
java中的参数传递
调用方法时,参数传递方式是值传递。当参数为基本数据类型时,传递的为实际值;参数是引用类型时,传递的是对象的地址。1.基本类型参数传递的例子:public void changeInt(int value){ value = 55;}……//调用这个方法val = 11;pt.changeInt(val);System.out.println(val);//输出11 因为传的是原创 2017-11-14 17:10:56 · 369 阅读 · 0 评论 -
java中的枚举和注解
枚举:enum例如:enum Light{Red,Yellow,Green};Light light = light.Red;实际上它生成了class Light extends java.lang.Enum 也可以在enum定义体重添加字段、方法、构造方法(自定义枚举)enum Direction{ EAST("东",1),SOUTH("南",2),WEST("西",3),EAST("原创 2017-11-28 20:12:33 · 465 阅读 · 0 评论 -
java中的输入输出流(字节流 字符流 节点流 过滤流)
输入输出流有关的类在java.io包下,jdk1.4起加了java.nio包,jdk1.7对其做了改进,称为nio2。 按流中处理的数据是以字节(8位)为单位还是以字符(16位)为单位分为字节流和字符流字节流: InputStream和OutputStreamInputStreamInputStream是抽象类,不能直接用new InputStream()构造实例。 FileInputStre原创 2017-12-03 23:25:44 · 3267 阅读 · 0 评论 -
把一个file对象的内容带上行号复制到另一个file对象(java)
import java.io.*;public class CopyFileAddLineNumber { public static void main (String[] args) { String infname = "CopyFileAddLineNumber.java"; String outfname = "CopyFileAddLineNum原创 2017-12-03 23:31:05 · 785 阅读 · 0 评论 -
java中对象、基本数据的读写(serializable序列化)
java中的读写实际很多都可以算作二进制的读写,但由于对对象和基本数据的读写较为特殊,因此单独拿出来讲。对象的读写:ObjectInputStream ObjectOutputStream 基本数据的读写:DataInputStream DataOutputStream把对象或基本数据写到文件里的过程叫序列化(serialize),从文件中读取一个对象或基本数据叫反序列化(deserialize)原创 2017-12-03 23:40:31 · 1904 阅读 · 0 评论 -
“The import XXX cannot be resolved” (跨工程引用类)
选择project –> clean后,OK。 如果还不行,删掉全部import,然后按alt+/提示,逐个导入。↑以上方式用于同一工程中确定包名等没问题后 原文链接当需要引用的包跨工程时,Eclipse中具体方法: 1.在现工程名上鼠标右击->Build Path->Configure Build Path… 2.在弹出的对话框的第二个选项卡(Projects)中Add需要被导入的类原创 2017-11-28 09:02:50 · 1059 阅读 · 0 评论 -
用记事本写java的第一个程序hello world 以及eclipse的使用方法
对于java而言: .java文件(编译器compiler通过javac命令生成)字节码文件(.class)(解释器interpreter通过使用java命令生成)program用记事本写java 文件后缀为.java且public class +文件名 一定要和文件名一模一样 例如 写:public class Hello{ public static void main(Stri原创 2017-08-03 16:59:15 · 2876 阅读 · 0 评论 -
java之异常处理
异常的父类:Throwable 两大子类:Error和Exception error一旦出现(比如说内存溢出、虚拟机错误、内存死锁等),程序将会崩溃,我们无法解决,主要讨论Exception(也就是通常所说的异常)。异常一般是编码、环境、用户操作输入出现问题。Exception的子类:RuntimeException(运行时异常,也即非检查异常,其他异常被称为检查异常(CheckExceptio原创 2017-11-19 23:11:00 · 246 阅读 · 0 评论 -
java中的常用类(包装类、Date类、Calendar类和Math类)
包装类 包装类主要提供了两大类方法: 1. 将本类型和其他基本类型进行转换的方法 其实强制转换也可以做到某些部分,但是比如说把integer强制转换为String就会报错 包装类和强制转换并没有什么关系,它的目的是把基本数据类型变成对象。因为java是强类型语言,所以当函数接收的参数为对象时,传入的参数必须为对象而不能是基本数据类型,包装类解决了这一问题。 Integer包装类的构造方法:原创 2017-09-14 20:01:50 · 933 阅读 · 0 评论