Java学习笔记
「已注销」
这个作者很懒,什么都没留下…
展开
-
File类概述及一些基本操作
概述File代表文件或文件夹路径,路径可分为觉得路径和相对路径: 绝对路径:从盘符开始 相对路径:相对于某个位置的路径,在Eclipse是指当前项目下,dos下指的是当前路径。功能1、创建新文件:File file1 = new File("yyy.txt"); System.out.println(file1.createNewFile()); File file2 = new Fil原创 2016-11-13 10:42:22 · 691 阅读 · 0 评论 -
Java之异常处理
1、异常的概述和分类1、概念: 异常是指Java程序在运行过程中出现的错误。 2、分类: 2、 JVM默认处理异常的方式当main函数接收到一个问题是,有两种处理方式: 1、自己处理,例如try…catch; 2、交给调用main的jvm来处理; jvm会将异常名称、异常信息、异常出现的位置打印在控制台,同时程序将停止运行。3、异常处理的两种方式1、try…catch…finally原创 2016-11-08 18:44:07 · 380 阅读 · 0 评论 -
通过反射越过泛型检查
因为泛型只在编译期有效,在运行期会被擦除掉,所以可以通过反射越过泛型检查,例如在泛型为Integer的集合中添加String对象:public class Demo2_reflect { public static void main(String[] args) throws Exception { ArrayList<Integer> list = new ArrayLis原创 2017-03-03 11:14:23 · 435 阅读 · 0 评论 -
Java中类型转化问题
看下面这段代码,是不是有什么问题:byte b1 = 1;byte b2 = 2;byte b3 = b1 + b2;这段代码无法通过编译,因为在运算的时候byte、short、char等都会转化成int,所以要加强转将b1+b2转化成byte型。 下面一段代码:byte b1 = 100 + 27;byte b2 = 100 + 28;这段代码中第二句无法通过编译,因为128超过了byte原创 2017-01-02 17:33:57 · 370 阅读 · 0 评论 -
Java中如何跳出指定循环
有时我们需要在嵌套循环中跳出外部循环,这时只用break就不行了,看下面的代码: 这段代码的运行结果如下图: 在代码中对循环语句进行了标号,如a,b,只需要是合法标识符就可以。原创 2017-02-04 14:27:21 · 5541 阅读 · 0 评论 -
IO流之序列流
序列流可以把多个字节整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,然后依次往后面读。 这样做的好处是可以当需要把多个文件整合到一个文件时,可以节省代码,不需要每一个流都写一次拷贝代码。 不采用序列流: 采用序列流: 当有多个流的时候,可以用枚举:原创 2017-02-24 18:00:39 · 813 阅读 · 0 评论 -
JDK1.7新特性
1、二进制字面量System.out.println(0b110);输出62、字面量可以出现下划线System.out.println(100_000);输出100000,加下划线的目的是方便数。3、switch语句可以使用字符串在JDK1.7版本之前switch语句无法使用字符串,只能使用基本数据类型。4、泛型简化,菱形泛型ArrayList<Integer> list = new ArrayLi原创 2017-03-03 20:24:34 · 337 阅读 · 0 评论 -
IO流之ByteArrayOutputStream
该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后一次性获取所有数据。FileInputStream fis = new FileInputStream("a.txt"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 在内存中创建了可以增长的字符数组 int b; wh原创 2017-02-25 10:09:53 · 555 阅读 · 0 评论 -
IO流之标准输入输出流
System.in是标准输入流,默认可以从键盘读取字节数据,System.out是标准输出流,默认可以向控制台输出字符串和字节数据。 需要注意的是,标准输入流和输出流不需要关流,也可以所标准输入流和输出流只有一个,关流之后就无法再使用。一般来说,没有关联文件的流都不需要关流。改变标准输入输出流System.setIn(new FileInputStream("a.txt")); //改变标准原创 2017-02-26 00:13:27 · 391 阅读 · 0 评论 -
IO流之RandomAccessFile
RandomAccessFile并不是一种流,它是Object的直接子类,它融合了InputStream和OutputStream的功能,即能读又能写。 RandomAccessFile中有seek()方法,可以找到文件中的任意位置,并在这个位置写入,将这个位置原有的替代。可以用来多线程下载。RandomAccessFile raf = new RandomAccessFile("h.txt",原创 2017-02-26 00:29:11 · 363 阅读 · 0 评论 -
Java中常用的保留小数的方法
1、DecimalFormatpublic static void main(String[] args) { DecimalFormat df = new DecimalFormat("#.###"); double d = 3.1415; System.out.println(df.format(d)); }DecimalFormat位于j原创 2017-03-05 14:01:45 · 775 阅读 · 0 评论 -
多线程实现的两种方式及其区别
继承Threadpublic class Demo2_Thread { public static void main(String[] args) { MyThread mt = new MyThread(); mt.start(); // 注意调用的start()方法,而不是run()方法 for(int i = 0; i < 1000;原创 2017-02-26 21:07:04 · 14069 阅读 · 2 评论 -
获取一段字符串中最长的对称子串的长度
获取一段字符串中最长的对称子串,例如:sl1 232 1akfj12345678abcdcba87654321dssdf中最长的对称子串为:12345678abcdcba87654321public class Main { public static void main(String[] args) { String regex = "(.)(.)(.?)(.?)(.?)(.原创 2017-03-13 15:37:15 · 1819 阅读 · 0 评论 -
ConcurrentModificationException并发修改异常
并发修改异常是指当方法检测到对象的并发修改,但不允许这种修改时抛出的异常,例如有一个ArrayList集合,当检测到里面含有hello时,在hello的后面插入world: 此时就会抛出并发修改异常,这是因为在用迭代器进行遍历集合时同时在增加元素,此时有两种方法解决这个问题: 一:使用ListIterator进行迭代 二:用get方法进行遍历:原创 2017-02-21 19:24:45 · 508 阅读 · 0 评论 -
内部类
内部类简单说就是在类中定义类。内部类访问的特点内部类可以直接访问外部类成员,包括私有;外部类要访问内部类成员必须创建对象; 代码如下: 成员内部类私有局部内部类 注意,局部内部类访问它所在的方法中的局部变量必须用final修饰,但在jdk1.8中不需要。原创 2017-02-11 14:05:27 · 472 阅读 · 0 评论 -
反射
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个类对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的放射机制。要想解剖一个类,必须先获取到该类的字节码文件对象,拿到字节码文件对象之后就可以通过Class类中的方法来new对象或进行其他一系列操作。 要拿到字节码对象有三种方式: 1、已经有了一个对象原创 2017-03-02 22:31:55 · 233 阅读 · 0 评论 -
集合框架
后续文章中会有关于集合的具体知识点原创 2017-02-21 17:26:10 · 271 阅读 · 0 评论 -
Java中从键盘录入的三种方式及注意事项
1、从控制台接收一个字符 此方法只能获取一个字符,不能获取其他数据类型,一般不会使用2、从控制台接收一个字符串 这种方法只能从控制台接收字符串,而无法接收其他数据类型,如果想接收其他数据类型,要对其进行转换:int num = Integer.parseInt(str) // 假设str接收的是数字字符串,例如123double x = Double.parseInt(str) // 假设原创 2016-10-31 17:16:09 · 23887 阅读 · 1 评论 -
Java中==号与equals()方法的区别
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10;int y = 10;String str1 = new String("abc");String str2 = new String("abc");System.out.println(x ==原创 2016-11-01 17:29:08 · 62421 阅读 · 27 评论 -
代码块
构造代码块位于类中方法外出现,多个构造方法中相同的代码放到一起,每次调用构造都执行,并在构造方法中执行。静态代码块在类中方法外出现加了static修饰,用于给类进行初始化,在类加载的时候执行,并只执行一次,一般用于加载驱动。 看下面这段代码: 执行结果如下:原创 2017-02-04 20:57:52 · 343 阅读 · 0 评论 -
String、StringBuffer和StringBuilder的区别
StringBuffer和StringBuilderStringBuffer是JDK1.0版本的,是线程安全的,效率比较低;StringBuilder是JDK1.5版本的,是线程不安全的,效率比较高。StringBuffer和StringBuilder里面的方法是完全相同的。StringBuffer、StringBuilder和StringString是一个不可变的字符串,而StringBuffer原创 2017-02-19 16:36:23 · 315 阅读 · 0 评论 -
基本数据类型包装类
基本数据类型对应的包装类如下: 将基本数据类型封装成对象的好处是可以在对象中定义更多的功能操作该数据,比如数据类型之间的转换,进制之间的转换等。代码示例如下: 运行结果如下: 运行结果如下: 基本数据类型包装类有八种,其中七中有paseXxx的方法,只有Character没有,因为一位字符只能存一位,字符串和字符之间的转换同过toCharArray将字符串转换为字符数组。原创 2017-02-19 16:53:02 · 582 阅读 · 0 评论 -
线程的生命周期
多线程的生命周期有5中状态: 1、新建 创建线程对象; 2、就绪 线程对象已启动,但没有获得CPU的执行权; 3、运行 获取到CPU的执行权; 4、阻塞 失去CPU的执行权,回到就绪状态; 5、死亡 代码运行完毕,线程消亡;原创 2017-02-28 17:24:01 · 338 阅读 · 0 评论 -
互斥锁
互斥锁是JDK1.5的新特性,它可以实现和synchronize一样的作用,但更加强大。public class Demo3_ReentrantLock { public static void main(String[] args) { Printer3 p = new Printer3(); new Thread(){ public原创 2017-02-28 21:21:36 · 577 阅读 · 0 评论 -
正则表达式
基本概述正则表达式是指用来描述或匹配一系列符合某个语法规则的字符串的单个字符。比如注册的账号需要判断是否符合要求,就可以用正则表达式迅速解决。 请看下面一个示例: 这段代码是在验证输入的字符串是不是5到15位的不包含0的数字,运行结果如下:原创 2017-02-19 21:56:03 · 400 阅读 · 0 评论 -
如何从字符串中提取所需内容
优势我们需要从字符串中提取一些内容,这些内容往往有相同的特点,比如说手机号,邮箱等,下面看代码示例: 运行结果: 需要注意的是,一定要先找才能获取,即必须先调用find方法才能用group方法获取,如果要不断获取,只需调用find作为循环判断条件即可。原创 2017-02-20 19:50:17 · 2239 阅读 · 0 评论 -
在Java中生成随机数的方法
一、利用Math类中的random方法来生成随机数在Java语言中生成随机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不能够满足日常的需求。如日常工作中可能需要产生整数的随机数。其实,转载 2017-02-20 21:22:31 · 1127 阅读 · 0 评论 -
Java中如何精确计算小数
当用程序计算小数时,往往是不精确的,就像是三分之一只能近似表示为0.3333333333…无法精确表示,计算机计算也是同样的道理。 Java中提供了BigDecimal类来精确计算,代码示例如下: 运行结果如下:原创 2017-02-20 21:52:42 · 6441 阅读 · 0 评论 -
集合与数组的区别
区别一数组既能存储基本数据类型,也能存储引用数据类型;而集合只能存储引用数据类型,其实集合中也能存储基本数据类型,在存储的时候会自动装箱。区别二数组的长度是固定的,不能自动增长;集合的长度是可变的,会随着元素的增加而增长。原创 2017-02-21 16:38:43 · 402 阅读 · 0 评论 -
为什么JDK1.8中HashSet集合好像是有序的?
我们知道,Set集合是无序集合,即存取顺序不一致,但在JDK1.8中存取顺序好像是一致的,看下面的例子: 运行结果如下: 这是因为在JDK1.8中底层算法和以前的版本做了改进,降低了算法的模糊性,看下面的代码: 运行结果:原创 2017-02-22 17:01:56 · 10775 阅读 · 0 评论 -
HashSet保证元素唯一性的原理
使用Set集合是要去除重复元素,如果在存储的时候逐equals()比较,效率太低,哈希算法提高了去重复的效率,减少了使用equals()方法的次数,当HashSet对象调用add()方法存储对象时,会调用对象的HashCode()方法得到一个哈希值,然后在集合中查找是否有哈希值相同的对象,如果用,则调用equals()方法比较,如果没有则直接存入集合。因此,如果自定义类对象存入集合去重复,需要重写原创 2017-02-22 22:26:08 · 1799 阅读 · 0 评论 -
TreeSet集合排序原理
1、自然顺序即类要实现Comparable接口,并重写compareTo()方法,TreeSet对象调用add()方法时,会将存入的对象提升为Comparable类型,然后调用对象中的compareTo()方法进行比较,根据比较的返回值进行存储。 因为TreeSet底层是二叉树,当compareTo方法返回0时,不存储;当compareTo方法返回正数时,存入二叉树的右子树;当compareTo原创 2017-02-23 13:25:39 · 10344 阅读 · 2 评论 -
Map集合的遍历
1、通过键获取值2、通过键值对对象遍历原创 2017-02-23 15:38:13 · 309 阅读 · 0 评论 -
同步代码块
什么是同步代码块使用synchronize关键字加上锁对象来定义一段代码,这就叫同步代码块。什么时候使用同步代码块当多线程并发,有多段代码同时执行,如果希望一段代码在执行过程中多CPU不要切换到其他线程工作,这时就需要用到同步代码块。示例public class Demo1_Synchronized { public static void main(String[] args) {原创 2017-02-27 16:08:59 · 1342 阅读 · 0 评论