ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java知识点:IO

2022-09-11 17:30:09  阅读:252  来源: 互联网

标签:知识点 java String System IO println Integer hello out


IO四大基类

  • InputStream:字节输入流
  • OutputStream:字节输出流
  • Writer: 字符输入流
  • Reader: 字符输出流

BIO、NIO、AIO

  • BIO:Block IO 同步阻塞式IO,模式简单使用方便,并发处理能力低。
  • NIO:Non IO 同步非阻塞 IO,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。
  • AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO,异步 IO 的操作基于事件和回调机制。

反射

  • 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
  • 优点: 运行期类型的判断,动态加载类,提高代码灵活度。
  • 缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多
  • 应用:常见spring框架,动态代理模式,JDBC等

实现方式:

  • 通过new对象实现反射机制new 类().getClass()
  • 通过路径实现反射机制Class.forName(类的路径)
  • 通过类名实现反射机制类.class

String

  • String存放在字符串常量池,常量池位于堆内存中
  • String是只读字符串,对它进行任何操作,其实都是创建一个新的对象,再把引用指向该对象。(不变性可以通过反射机制修改)
  • String类不能被继承
public static void main(String[] args) throws Exception {
        String s = "hello";
        String s1 = s;
        String s2 = s;
        //通过使用替换函数修改字符
        String s3 = s1.replace('e', 'o');
        System.out.println(s);//hello
        System.out.println(s1);//hello
        System.out.println(s2);//hello
        System.out.println(s3);//hollo

        //通过反射修改字符
        Field value = String.class.getDeclaredField("value");
        value.setAccessible(true);
        char[] chs =(char[]) value.get(s2);
        chs[0] = 'o';

        System.out.println(s); //hollo
        System.out.println(s1);//hollo
        System.out.println(s2);//hollo
        System.out.println(s3);//hollo
    }

辨析 String s1 = "hello"String s2 = new String("hello")

  • s1的"hello"存储于常量池,s2的"hello"储存与堆内存中
  • 通过intern()如果常量池中不存在,可以将堆内存的string的引用拷贝一份到常量池,如果存在则直接返回常量池中的string
public static void main(String[] args) {
        String s = "hello";
        String s1 ="hello";
        String s2 = new String("hello");
        String s3 = new String("hello");
        String s4 = new String("hello").intern();

        System.out.println(s==s1); //true
        System.out.println(s==s2);//false
        System.out.println(s==s4);//true
        System.out.println(s2==s3);//false
        System.out.println(s2==s4);//false
    }

String、StringBuffer、StringBuilder

  • 操作少量的数据用 = String
  • 单线程操作字符串缓冲区下操作大量数据 = StringBuilder
  • 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

Integer、int数值相等

public static void main(String[] args) {
	Integer a1 = 1;
	Integer a2 = 1;
	Integer a3 = new Integer(1);
	Integer a4 = new Integer(1);
	int a5= 1;
	System.out.println(a1==a2);//true
	System.out.println(a3==a1);//false
	System.out.println(a5==a1);//true
	System.out.println(a5==a3);//true
	System.out.println(a2==a3);//false

	//常量池中的Integer对象值在-128到127之间
	Integer b1 = 128;
	Integer b2 = 128;
	System.out.println(b1==b2);//false
}

包装类和基本数据类型比较

  • 包装类和基本数据类型之间的比较,包装类拆箱为基本数据类型然后再进行比较,数值相同则相等,
  • 不同基本类型可以比较,数值一样则相等
  • Integer、Short、Long具有常量值(-128~127),Double、Float没有
  • 包装类仅Integer和Long之间可以比较,数值相同则相等,其他包装类之间比较有编译错误。

集合

  • 线程安全的集合类vector、statck、hashtable、enumeration
  • 只读集合Collections. unmodifiableCollection(Collection c)
  • 边遍历边移除 Collection 中的元素使用 Iterator.remove()

Iterator 和 ListIterator 有什么区别?

  • Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。
  • Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。
  • ListIterator实现Iterator 接口,新增添加替换元素、获取前后元素的索引位置等功能。

标签:知识点,java,String,System,IO,println,Integer,hello,out
来源: https://www.cnblogs.com/sleepyheadLK/p/16684422.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有