Java知识总结--SE篇
Java-SE
目录
Java-SE
1-1-什么是Java的跨平台原理
1.2-JDK 和 JRE 有什么区别?
1.3-Java基本数据类型
1.4-Java基本类型所占字节和范围
1.5-int(long) 和 float(double) 哪个表示的范围大?为什么?
1.6-Int和Integer的区别,在使用时有什么区别?
1.7-有了基本的数据类型,为什么还需要包装类型
1.8-装箱和拆箱,自动拆箱,自动装箱
1.9-重写,重载
1.10-==和equals方法的区别
1.11- final 在 java 中有什么作用?
1.12-面向对象的特征有哪些方面
1.13-接口和抽象类(接口的抽象级别最高)
1.14-抽象类不是必须要有抽象方法
1.15-普通类和抽象类的区别
1.16-抽象类不能使用 final 修饰
1.17-String底层实现,不可变的原因
1.18-String 不属于基础的数据类型
1.19-String str="str"与 String str=new String("str")的内存分配
1.20- String 类的常用方法
1.21-String,StringBuilder,StringBuffer的区别?
1.22-什么是值传递和引用传递?
1.23-SimpleDateFormat的作用和用法
1.24- java 中 IO 流分类
1.25-Java的流
1.26- Files的常用方法
1.27-如何创建文件和目录?
1.28-面向对象编程的六大原则
1.29-设计模式
1.30- 运行时异常与一般异常的区别
1.31-&和&&的区别
1.32-final, finally, finalize的区别。
1.33-error和exception的区别。
1.34-Math.round(9.5)等多少? Math.round(-9.5)等多少?
1.35-Java流程控制语句
1.36-反射
1.37-反射相关的类
1.38-反射的功能
1.39-反射的优点
1.40-反射的缺点
1.41-反射的使用场景
1.42-动态代理
1.43-动态代理的应用场景
1.44-动态代理实现
1.45-序列化和反序列化
1.46-序列化使用场景
1.47-怎么实现序列化
1.48-序列化需要付出的代价
1.49-BIO,NIO,AIO
1-1-什么是Java的跨平台原理
Java通过不同的系统,不同的版本不同的位数的Java虚拟机(JVM)来屏蔽不同的指令集,然后对外提供了统一的Java接口(API),这样,我们的开发者只需按照接口开发即可,如果系统需要部署在不同的环境是,只需要系统上面按照片对应版本的虚拟机即可
1.2-JDK 和 JRE 有什么区别?
- JDK:java 开发工具包,提供了 java 的开发环境和运行环境。
- JRE:java 运行环境,为 java 的运行提供了所需环境。
1.3-Java基本数据类型
1.4-Java基本类型所占字节和范围
1.5-int(long) 和 float(double) 哪个表示的范围大?为什么?
float表示的 范围更大。float 和 int 都是4个字节,而 float 还要表示小数,为什么 float 表示的数字范围大?
int 底层使用的是补码的方式表示一个数:1 位符号位 + 31 位二进制数
- float 底层使用的是IEEE 754 浮点单精度数字格式,简单来说就是用指数的形式去表示一个数:1 位符号位 + 8 位指数 + 23位尾数
1.6-Int和Integer的区别,在使用时有什么区别?
Integer是int的包装类,int则是java的一种基本数据类型
Integer变量必须实例化后才能使用,而int变量不需要
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
Integer的默认值是null,int的默认值是0
1.7-有了基本的数据类型,为什么还需要包装类型
- 因为Java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性
1.8-装箱和拆箱,自动拆箱,自动装箱
装箱:把基本的数据类型转换成对应的包装类型
拆箱:把包装类型转换成对应的基本数据类型
自动装箱:实际上编译时会调用integer.valueOf方法来装箱 Integer i=1;
自动拆箱:实际上编译时会调用intValue方法来拆箱 Int j=i.intValue();
1.9-重写,重载
重载:方法名字相同,而参数不同。返回类型可以相同也可以不同
重写:子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
声明为 static 的方法不能被重写,但是能够被再次声明。
子类如果不是抽象类,则必须重写父类中的
abstract
方法。如果不能继承一个方法,则不能重写这个方法。
1.10-==和equals方法的区别
==对于基本类型是比较的是值是否相同,对于引用类型比较的是地址是否相同。equals默认情况下是引用的比较,只是很多类重写了 equals的方法,比如spring,integer等把它变成了值比较,所以一般情况下equals比较的是值是否相等
1.11- final 在 java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
1.12-面向对象的特征有哪些方面
多态,继承,封装, (抽象)
抽象:把一个对象,抽象为类
封装:隐藏类的内部信息,外部类不可以直接访问,可以通过get/set去获取或值改变这个类
继承:通过extends继承父类的基本特征和行为,子类也可以改变这些基本特征和行为
多态:也就是同一个操作作用在不同对象上面的时候可以产生不同的效果
1.13-接口和抽象类(接口的抽象级别最高)
相同点:
不能被实例化。
不同点:
抽象类要被子类继承extends,接口要被类实现implements 。
抽象类可以有构造函数;接口不能有。
接口支持多继承,抽象类只允许单继承。
接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
1.14-抽象类不是必须要有抽象方法
不需要,抽象类不一定非要有抽象方法。
public abstract class Person{public static void say() {System.out.println("HELLO");}
}
1.15-普通类和抽象类的区别
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。
1.16-抽象类不能使用 final 修饰
定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类
1.17-String底层实现,不可变的原因
String的底层是使用char数组的,char数组和String类都是被final修饰的,所以不可以改变
1.18-String 不属于基础的数据类型
String 不属于基础类型,String 属于对象。
1.19-String str="str"与 String str=new String("str")的内存分配
因为内存的分配方式是不一样的,String str="str"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("str") 则会被分到堆内存中。
1.20- String 类的常用方法
length()字符串的长度
charAt() 截取一个字符
equals()和equalsIgnoreCase() 比较两个字符串
compareTo()和compareToIgnoreCase() 比较字符串
concat() 连接两个字符串
replace() 替换
toUpperCase() /toLowerCase() 转换为大小写
trim() 去掉起始和结尾的空格
String test="abcdefg";String test2=" ABCDEFG ";System.out.println("字符串长度=" + test.length());System.out.println("截取一个字符 = " + test.charAt(2));int compareTo = test.compareTo(test2);System.out.println("compareTo = " + compareTo);int compareToIgnoreCase = test.compareToIgnoreCase(test2);System.out.println("compareToIgnoreCase = " + compareToIgnoreCase);boolean b = test.equals(test2);System.out.println("b = " + b);boolean b1 = test.equalsIgnoreCase(test2);System.out.println("b1 = " + b1);String str=test.concat(test2).concat("test");System.out.println("str = " + str);str=str.replace("test","idea");System.out.println("str = " + str);str=str.toLowerCase();System.out.println("str = " + str);str=str.toUpperCase();System.out.println("str = " + str);int test2Length=test2.length();test2=test2.trim();System.out.println("test2Length2 = " + test2Length);int test2Length1=test2.length();System.out.println("test2Length1 = " + test2Length1);
//字符串长度=7
//截取一个字符 = c
//compareTo = 65
//compareToIgnoreCase = 65
//b = false
//b1 = false
//str = abcdefg ABCDEFG test
//str = abcdefg ABCDEFG idea
//str = abcdefg abcdefg idea
//str = ABCDEFG ABCDEFG IDEA
//test2Length2 = 14
//test2Length1 = 7
1.21-String,StringBuilder,StringBuffer的区别?
String是只读字符,值不可以改变的
StringBuffer的值是可以改变的,线程安全
StringBuilder的值是可以改变的,线程不安全
1.22-什么是值传递和引用传递?
值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原来变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
一般认为,java内的基础类型数据传递都是值传递. java中实例对象的传递是引用传递
1.23-SimpleDateFormat的作用和用法
SimpleDateFormat的作用是用于设置时间格式的
把日期转换为指定格式的字符串
SimpleDateFormat sdformat = new SimpleDateFormat("yyy y-MM-dd HH:mm:ss");
String text = sdformat .format(new Date());//text = 2020 2020-06-14 16:00:54
把字符串转换为指定格式日期
public static void main(String []args) throws ParseException {String text = "2020年1月1日 1:11:11";SimpleDateFormat sdformat= new SimpleDateFormat("yyyy年M月dd日 H:mm:ss");Date date= sdformat.parse(text);System.out.println("date = " + date);
}
//date = Wed Jan 01 01:11:11 CST 2020
1.24- java 中 IO 流分类
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
1.25-Java的流
1.26- Files的常用方法
Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。
1.27-如何创建文件和目录?
File file = new File("D:", "one");
//创建文件夹
file .mkdir(); //创建文件
file .createNewFile(); //删除文件
file .delete();
1.28-面向对象编程的六大原则
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、单一职责原则(Single responsibility principle)
单一职责原则是指:一个类应该只有一个发生变化的原因,即一个类只负责一项职责。
如果一个类有多个职责,这些职责就耦合在了一起。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起会影响复用性。
此原则的核心是解耦和增强内聚性。
1.29-设计模式
单例模式(饱汉模式,饥汉模式)
- 1)构造方法私有化,让除了自己类能创建外其他地方都不可以创建
- 2)在自己的类中创建一个单实例(饱汉模式一出来就创建单实例,饥汉模式需要的时候才 创建)
- 3)提供一个方法获取该实例对象(饥汉模式创建时需要进行方法同步)
工程模式:spring的IOC就是使用工程模式
对象的创建交给一个工厂创建
代理模式:Spring的AOP就是使用的动态代理
包装模式
1.30- 运行时异常与一般异常的区别
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
1.31-&和&&的区别
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
1.32-final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时 的其他资源回收,例如关闭文件等。
1.33-error和exception的区别。
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
1.34-Math.round(9.5)等多少? Math.round(-9.5)等多少?
- Math.round(9.5) =10
- Math.round(-9.5) =-9
数轴上取值时,中间值(0.5)向右取整,所以正 9.5 是往上取整,负 9.5 是直接舍弃。
1.35-Java流程控制语句
break ,continue ,return
- break 跳出总上一层循环,不再执行循环(结束当前的循环体)
- continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
- return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)
1.36-反射
自己写的反射文章,点击链接跳转:反射-新手必看
更多内容建议参考,点击链接跳转:反射
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
1.37-反射相关的类
- Class类 类的实体,在运行的Java应用程序中表示类和接口
- Field类 类的成员变量/类的属性
- Method类 类的方法
- Constructor类 类的构造方法
1.38-反射的功能
在运行时判断任意一个对象所属的类,对象,所具有的成员变量和方法同时可以调用任意一个对象的方法。
1.39-反射的优点
反射提高了程序的灵活性和扩展性,在底层框架中用的比较多,但是还是建议在业务层面的开发过程中尽量少用。
1.40-反射的缺点
- 速度慢
- 程序逻辑会更加的复杂,所以维护起来比较累人,建议少用
1.41-反射的使用场景
- 拷贝属性值(BeanUtils.copyProperties);
- 实现ORM框架;
- 实现RPC框架等;
1.42-动态代理
在运行时,创建目标类,可以调用和扩展目标类的方法
1.43-动态代理的应用场景
- Spring AOP
- 加权限,事务,日志等操作
1.44-动态代理实现
Java的两种动态代理方式:JDK反射机制生成代理还有就是CGLIB代理
- JDK反射机制生成代理:继承InvocationHandler接口
- CGLIB代理:继承MethodInterceptor接口
JDK代理必须要提供接口,而CGLIB则不需要,可以直接代理类
1.45-序列化和反序列化
- 序列化:把对象转换成字节序列的过程就叫做序列化
- 反序列化:把字节序列恢复成对象的过程就叫做反序列化
1.46-序列化使用场景
- 把内存的对象状态保存到文件和数据库中的时候需要序列化
- 网络传输对象的时候需要序列化
1.47-怎么实现序列化
简单的实现Serializable接口即可
1.48-序列化需要付出的代价
这里给大家贴出链接,由于演示需要比较多的文字,所以给大家推荐一篇写的很不错的文章,还请理解
序列化代价-点击链接跳转
1.49-BIO,NIO,AIO
BIO(Block IO):同步阻塞式 IO,就是我们平常使用的传统 IO,特点是模式简单使用方便,并发处理能力低。
NIO(Non IO):同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO(Asynchronous IO):是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
//持续更新。。。。。。
Java知识总结--SE篇相关推荐
- java知识大全积累篇
原文出自:http://www.importnew.com/14429.html 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使 ...
- Java知识积累-基础篇
把前段时间看过的内容,结合面试经历,作以整理,持续改进:D Java基础 JVM emmmm,为什么把JVM放第一个咧-- 主要是因为之前某次面试的时候被问到"从宏观角度怎么看Java&qu ...
- java知识回顾_Java – 2012年回顾和未来预测
java知识回顾 这篇文章将重点讨论2012年发生的大小事件,并展望2013年的一些未来预测.其中一些预测将是诚实的猜测,而另一些则将是诚实的猜测. 好吧,只要说我的"恶魔般"的一 ...
- 工作中需要用到的Java知识(线程安全集合学习篇)
在上篇中我们深入学习了JUC中的lock锁与synchronized关键字的区别,以及一些关键问题,特点的探讨,这一篇我们继续进行JUC的学习. 线程安全是什么意思呢? 线程安全是指在多线程运行的情况 ...
- JAVA知识体系之多线程篇
目录 1.线程概述 1.1 线程的定义 1.2 多线程的优势 1.2.1 更多的处理器核心 1.2.2 更快的响应时间 1.3 多线程的挑战 1.3.1 上下文切换 1.3.2 死锁 1.3.3 资源 ...
- JAVA知识体系之数据库篇——MySQL
目录 1.一条查询语句的执行流程 1.1 MySQL基本架构 1.2 连接层 1.3 服务层 1.3.1 查询缓存 1.3.2 解析器(Parser) 词法解析 语法解析 1.3.3 预处理器(Pre ...
- Java知识体系之JVM篇
Java知识体系之JVM篇 目录 博客链接 Java虚拟机知识点总结 https://blog.csdn.net/qq_24095055/article/details/88574017 String ...
- java知识分享篇一
大家好,我是小小刀,我们又见面啦,本文是一个新的系列->java分享系列,现在有三个系列,java学习系列:一篇系统的讲一个知识点,java故事系列:散文 随笔,有知识点也有生活.本篇是java ...
- java知识回顾_Java7 –回顾
java知识回顾 我开始写博客文章,介绍即将发布的Java8版本中的新增功能 ,并认为我将从快速回顾一下Java7带给我们的内容开始. Java7于2011年7月发布,被描述为"更具进化性而 ...
最新文章
- iis php 假死 nginx,网站假死 重启NGINX无效 必须重启PHP 原因分析
- Python中的条件选择和循环语句
- Centos7 Docker私有仓库搭建
- bind() c语言,c/c++ 标准库 bind 函数详解
- mysql_ping()函数的作用以及返回值的类型正确的是,[单选] mysql_ping()函数的作用以及返回值的类型正确的是:()...
- MySQL DML语言笔记
- 显卡服务器已停止响应,Win7电脑提示显卡驱动程序已停止响应并且已恢复如何解决?...
- 进程的系统调用命令转换为INT 0x80中断的过程
- MySQL主从复制原理(原理+实操)
- 微型计算机常用的分区格式,教你分出整数的硬盘分区
- GIF 屏幕录制工具
- 计算机基础教材编写委员,大学计算机基础论文关于凸现应用型人才培养的大学计算机基础教材建设论文范文参考资料...
- 深蓝-视觉slam-第三节习题
- 地图处理方法-判断一个点是否在某个区域内
- Ubuntu 的 openssl 安全问题提醒 USN-2192-1
- OneDrive登录时出现问题· 请稍后重试。(错误代码: 0x8004de25)
- 你看天上那朵云,像不像我借你的2万?
- matlab edittext 回车,安卓中的虚拟键盘实现,KeyEvent的事件分发、处理机制。EditText是如何将KeyEvent事件转为字符输入的?...
- 基于MATLAB的线激光三维彩色扫描仪
- P2P平台投宝金融跑路?为什么我没有中雷!
热门文章
- 基于echarts 数据可视化大屏展示数据概览演示案例
- 金山wps Android反编译,关于Android外部应用启动wps的处理
- win7电脑遇到打开文件夹不在同一个弹窗,且返回和前进键置灰
- 【Oracle 11g中 ORA-28000 账号被锁定的解决办法】
- Swiper制作3d旋转木马轮播
- postfix MySQL配置_postfix+mysql
- 小程序为什么值得创业,代理加盟前景如何
- 邵夷贝·她们说·一首写给她的歌
- python 绘图-不同的中文字体汇总
- 基于servlet+jsp开发的电影购票系统(附源码)