文章目录
- java,javac,javadoc,jar命令区别
- JVM虚拟机
- Java基础编译原理
- Java跨平台原理
- Java程序注释
- Java编码规范 开发工具
- API 应用程序接口
- 变量和数据类型
- 选择结构
- 循环结构
- 什么是装箱?什么是拆箱?
- 数据结构
java,javac,javadoc,jar命令区别
-
java 通知虚拟机运行一个
.class
文件 -
javac编译 用来把
.java
文件编译为.class
文件 -
javadoc命令是用来生成自己
API
文档的
它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。 -
jar是随 JDK 安装的,在 JDK 安装目录下的
bin
文件夹下
是用来打包的,有许多具体的参数,通常JAR文件是一种压缩文件,并且与常见的Zip文件兼容。
JVM虚拟机
.java
文件使用javac
编译成.class
文件
.class
文件可以运行在多个操作系统对应的jvm
虚拟机jvm
基于操作系统给不同的操作系统配置对应的运行环境。
环境变量:
JAVA_HOME:方便找安装目录
CLASSPATH:lib目录下的dt.jar,lib.jar,rt.jar
path:bin;jre\bin
Java基础编译原理
java语言的"编译期"分为前端编译和后端编译两个阶段。前端编译是指把*.java
文件转变成*.class
文件的过程;后端编译(JIT, Just In Time Compiler)是指把字节码转变成机器码的过程。
在编译原理中, 将源代码编译成机器码, 主要经过下面几个步骤:
Java跨平台原理
java是一种一种跨平台语言,能够实现一次编译,到处运行,其中java的跨平台性主要是依靠JVM实现的。
注意:java是跨平台的,但是JVM不是跨平台的
我们编译好java源程序之后,要想在不同的操作系统上运行,只需安装相应的JVM即可。Java程序通过JVM 才具有跨平台的特性,但JVM本身并不是跨平台的。也就是说,不同操作系统的JVM是不同的,Windows平台的JVM不能用在Linux中,反之亦然。
简而言之,也就是说,不同的平台本身有着不同的JVM,是JVM成就了Java的跨平台特性。
Java程序注释
在Java注释中基本包括单行注释多行注释。
- 单行注释:使用“//”开头,在后面添加文字注释。
- 多行注释:使用“/”开头以“/”结尾。
- 文档注释:使用“/**”开头,以“*/”结束。也是多行注释。
编写注释的原因:用以说明某段代码的作用,便于程序员阅读,便于代码的后期维护和升级。
Java编码规范 开发工具
Java编码规范问题可以参考以下这篇博客
《阿里java开发手册》
API 应用程序接口
API(Application Programming Interface),应用程序编程接口。
Java API是一本程序员的字典 ,Java API是JDK中提供给我们使用的类。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
API的使用步骤:
- 打开帮助文档。
- 点击显示,找到索引,看到输入框。
- 你要找谁?在输入框里输入,然后回车。
- 看包。java.lang下的类不需要导包,其他需要。
- 看类的解释和说明。
- 学习构造方法。
- 使用成员方法。
变量和数据类型
十进制和二进制:0和1
22 byte 0001 0110
-22 byte 0001 0001 0110
-22 int 0001 0000 0000 0000 0000 0000 0000 0001 0110
符号:- 符号位
数据类型:
- 整形:int 32、short 16、byte 8 、long
a=10L;
64 - 浮点型:double 2048 、float
f=1.0f;
1024 - 字符型:char 8位:0 ~ 9 , a ~ z , A ~ Z
0:48 a:97 A:65
- 布尔型:boolean 1位
- java引用类型:String array Math Random Scanner
- 自定义类型:Student{}
存储不同:基本数据类型存储在栈中,值来源于常量池。
引用数据类型存储在堆栈中,值来源于常量池、对象、方法区中。
栈中基本数据存为值,引用数据类型存为地址
参数传递过程中,基本类型传值,引用类型传址。
类型转换:
- double a=10; / / 隐式类型转换 小转大
- short s=10;
- short s1 = (short) (s+1); / / 强制类型转换 大转小
- List list = new ArrayList(); / / 子类对象引用父类类型
选择结构
switch(java8可以放字符串) 不支持long类型
循环结构
增强 for 和 普通 for 的区别
增强for只能在遍历的时候使用
普通for可增删改查,效率最高
什么是装箱?什么是拆箱?
1、什么是装箱?什么是拆箱?
装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。
2、装箱和拆箱的执行过程?
装箱是通过调用包装器类的 valueOf 方法实现的
拆箱是通过调用包装器类的 xxxValue 方法实现的,xxx代表对应的基本数据类型。
如int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法。
3、常见问题?
整型的包装类 valueOf 方法返回对象时,在常用的取值范围内,会返回缓存对象。
浮点型的包装类 valueOf 方法返回新的对象。
布尔型的包装类 valueOf 方法 Boolean类的静态常量 TRUE | FALSE。
数据结构
初窥数据结构可以参考这里!
Collection:集合
数组:
数据结构为线性表,对应指针映射生成下标
如果是在长度内的增:在末尾增,效率最高;在首位增,效率最低。
查询效率较高,改动方便。
尾部增(数组扩容)逻辑实现:
- 新建数组:由原本长度扩展为长度+增加的元素个数,把数据依次填入
- 新数组对象接收 Arrays.copyOf(原数组,新长度),把新增数据填入
其他位增:
- 插入位置前的数据:新数组对象接收Arrays.copyOf(原数组,新长度)
从插入位修改新增数据,把剩余的数据依次修改新数组 - 元素位移:新数组从末尾开始到插入位结束,要把所有元素依次后移然后再插入(不会产生新的对象,代码实现复杂)
ArrayList:arrList对象
增:arrList.add(下标,数组)
初始值为10,当内容超出0.75的时候,默认创建预留空间0.5倍 long的最大值-8
防止数组越界
泛型:目的是保证集合中数据类型的统一
E element 元素
T 反之所有的Java类型
K 键
V 值
LinkedList:数据结构链式表
增删快,查询和修改很慢
<元素,前,后> <元素,前,后>
LinkedList至少需要3份空间
HashSet:去重
如何实现去重,add(obj) 方法调用的是map.put(obj,xxx)
把值作为map的key存储,因为key的hash值一定,所以不会出现重复
遍历的时候只有增强for和迭代器
没有get(i)方法 无法以下标删除元素 没有修改方法
LinkedHashSet 用链表的形式 有序且不重复
HashMap:
Entry
<key,value>
HashMap 遍历:拆分成keyset来遍历key 用collection 遍历(ArrayList)value
HashMap 底层数据量过大
HashMap 扩容阈值
HashMap 负载因子
IO流:数据结构为队列
目前先整理以上部分内容,随时会进行补充…
更多推荐
【夯实Java基础】(一)Java入门时的知识你还记得吗?
发布评论