# Java
**Repository Path**: lgdsail/java
## Basic Information
- **Project Name**: Java
- **Description**: 个人Java学习笔记
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-11-14
- **Last Updated**: 2023-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# What-Java是什么
## 名词解释
### JVM
--> Java Virtual Machine虚拟机
内存中开辟一块空间 源文件-->JVM编译-->字节码.class-->JVM解释-->机器语言01
### JRE
-->Java Runtime Environment 运行环境,运行别人写好的java程序需要的翻译软件包含JVM,识别.class文件
### JDK
-->Java Development Kit 开发工具包
开发时需要用到的工具, 编写java程序需要引用的工具包,编译时需要进行引用,识别.java文件
JDK,JRE,JVM的关系

### javac.exe
用来编译源码.java
### java.exe
用来翻译字节码.class
classpath用于指定执行.class文件的位置
### javadoc
用来生成使用文档
Java代码自动生成使用文档
解析命令:javadoc -d myjavadocument -author -version helloworld.java
### javap
用来反编译class文件成字节码文件,底层虚拟机执行动作
javap -v TestVar02.class
### bin目录
全是工具
### jre目录
包含运行环境
### lib目录
包含了第三方包所有的Java类
### include目录
其他语言写的程序,native修饰符
### src.zip压缩包
java源代码
## JavaSe, JavaEE, JavaME的区别

## Java跨平台原理



# Java产生的原因-why
## Java语言特性
1.跨平台性 平台(不同厂商的芯片)(不同版本的操作系统)
2.面向向对
3.简单性 省去C++多继承,指针等
4.健壮性(鲁棒性) 垃圾回收机制 异常处理机制
5.多线程性 并发操作 提高执行性能 线程安全
6.大数据开发
## Java历史背景
stanford university network -- SUN公司 SUN Microsystems
由James-Gosling创立Java
1992-1995年创立oak
1955.5.23正式发布Java语言
Java -瓜哇岛的故事(让全球知道猫屎咖啡)
1996.1开发工具包JDK1.0
1997.2jdk1.1版本问世
1998.12JavaEE企业版
1999.6 Java第二代平台JDK2.0细化了三个不同的小版本
1.(J2SE)Java2 Standard Edition Java第二代平台标准版 桌面级 C/S
2.(J2EE)Java2 Enterprise Edition Java第二代平台企业版 企业级 B/S
3.(J2ME)Java2 Micro Edition Java第二代平台微型版 移动端
2000--2002 JDK1.3 JDK1.4大幅提升Java性能
2004.5JDK1.5版本发布,很多新的特性
2005.6Java6最经典的版本 留存最久的版本
2009
Oracle 并购 74亿$ Java易主
2011 Oracle Java7
2014 Oracle Java8
2017 Oracle Java9
# Java使用方法-How
## Java开发环境配置
### windows系统下开发环境配置
oracle-jdk8
[https://shimo.im/docs/5rk9d0K8YBibKlqx](https://shimo.im/docs/5rk9d0K8YBibKlqx)
open-jdk18
[https://shimo.im/docs/5bqnrEdbOKFdzvqy](https://shimo.im/docs/5bqnrEdbOKFdzvqy)
### linux系统下开发环境配置
## 编辑源代码
### 编写以后缀.java结尾的文件
建议文件名称一致,提升代码可读性
Demo.java
```java
class Demo{
//主方法不属于任何类,主方法属于虚拟机
public static void main(String[] args){
System.out.println("hello world.");
}
}
// 下面中括号括起来的可有可无,其他一定要有
//权限修饰符 [特征修饰符] 返回值类型 方法名字(参数列表,参数可以没有值)[抛出异常][代码块{}]
// public修饰方法的权限,public表示所有Java代码都可以调用,protected表示 , private表示 ,不写有默认表示
// static修饰方法是否只有一个,static表示只有一个
// void修饰当前方法执行完毕没有返回结果,有返回值则写返回值的类型
// main如果方法名称是这个,表示是类的主方法.JVM会从这个开始解释
// String[] 变量的类型,String[]表示字符串列表
// args变量名称,表示参数的名称,args给下面程式引用
```

Test.java
```java
// 增加public 会强制类的名字必须与文件名称一致
public class Demo{
public static void main(String[] args){
System.out.println("hello world.");
}
}
```
### 编译为字节码
```java
> javac Demo.java
```
### 执行字节码
JVM根据.class声明的内容在内存条中开辟一个内存空间,翻译的.class内容为机器码,分三种类型的空间,栈内存 LIFO FILO; 堆内存; 所有元素空间(常量池, 方法区(类模板), 静态元素区static)
|栈内存 LIFO FILO| 堆内存|所有元素空间,所有的-存储内存|
|:----|:----|:----|
|所有的方法都在这里执行| |常量池,缓冲区,以二进制形式存储
整数默认是32bit存储
小数4.2等默认是64bit存储
34243422L
字符'a'默认是16bit存储|
|变量 long a = 34243422L| |方法区(类模板)|
|main| |静态元素区static|
声明float类型的数据需要在常量后面增加F
float e = 4.2F;
=赋值的时候自动做决定,如果空间过大,无法存储,会舍弃前面都是0的值自动类型转换
byte a = 1;
声明long类型的整数如果超过32bit需要在常量后面增加L,因为默认32位存储不下
long d = 2147483648L;
```java
# java运行的文件不能带文件类型.class
> java Demo
```
## 查看.class文件
Binary Viewer.exe
## 反编译软件
.class --> .java
jd-gui.exe、java Decompiler
# 参考文档
Java在线文档地址
英文:[https://docs.oracle.com/javase/8/docs/](https://docs.oracle.com/javase/8/docs/)
[https://docs.oracle.com/javase/8/docs/api/index.html](https://docs.oracle.com/javase/8/docs/api/index.html)
中文:[https://github.com/apachecn/java8-tut-zh](https://github.com/apachecn/java8-tut-zh)
[https://www.matools.com/api/java8](https://www.matools.com/api/java8)
[http://itmyhome.com/java-api/](http://itmyhome.com/java-api/)
文档下载地址
英文:[https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html](https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html)
中文:[https://github.com/apachecn/java8-tut-zh](https://github.com/apachecn/java8-tut-zh)
中文 : [https://pan.baidu.com/s/16qGAOZahqB4mpAWOH-He-A](https://pan.baidu.com/s/16qGAOZahqB4mpAWOH-He-A)
提取码:lgd1 复制这段内容后打开百度网盘手机App,操作更方便哦
jdk历史版本
[https://www.oracle.com/cn/java/technologies/downloads/archive/](https://www.oracle.com/cn/java/technologies/downloads/archive/)