文章目录

    • 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的使用步骤:

  1. 打开帮助文档。
  2. 点击显示,找到索引,看到输入框。
  3. 你要找谁?在输入框里输入,然后回车。
  4. 看包。java.lang下的类不需要导包,其他需要。
  5. 看类的解释和说明。
  6. 学习构造方法。
  7. 使用成员方法。

变量和数据类型

十进制和二进制: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(原数组,新长度),把新增数据填入

其他位增:

  1. 插入位置前的数据:新数组对象接收Arrays.copyOf(原数组,新长度)
    从插入位修改新增数据,把剩余的数据依次修改新数组
  2. 元素位移:新数组从末尾开始到插入位结束,要把所有元素依次后移然后再插入(不会产生新的对象,代码实现复杂)

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入门时的知识你还记得吗?