JAVA基础

基本知识

 

网页:通过浏览器将数据展示在用户面前,(数据是写死的)跟后台服务器没有交互
网站:通过后台服务器的交互,将查询到的真实数据再通过网页展示出来。(通过后台服务器的查询,把查询到的真实数据再通过网页展示出来)
网站=网页+后台服务器

java由1995年在sun公司研发,于1996年发布了1.0版本
2002年发布了1.4版本,
java语言的里程碑性质版本:2004年发布的5.0版本(因为该版本的更新特别大,所以直接跳到了5.0)
2006年发布了6.0版本
注意:2009年Oracle甲骨文公司收购Sun公司(如果今后想要下载和java相关的软件,就要到Oracle的官网进行下载了)
…………
市面上就用的最多,最稳定的版本:
2014年发布的java8.0版本
基本每一年Oracle公司都会更新版本
2019年3月发布了12.0版本
 

java跨平台原理:在不同的操作系统中,都安装一个与操作系统对应的java虚拟机(JVM---java Virtual Machine)
JVM虚拟机本身不允许跨平台,允许跨平台指的是java程序,而并不是JVM虚拟机这个软件。(每个操作系统中都有一个对应的JVM,java程序运行在JVM中)

JRE:java运行环境,包含JVM虚拟机及java核心类库
类:类就等同于一个java文件,java文件也可以称之为一个类
类库:存放多个java文件的仓库
核心类库:java已经写好的,非常核心的,代码仓库
核心类库的意义:我们自己在编写代码的过程中,需要用到java的核心类库,而核心类库是存放在JRE当中的

.java文件属于源文件,是无法被JVM识别执行的。
解决方案:将其翻译为JVM可以直接识别并执行的
翻译方式:使用java提供在JDK中的翻译工具来进行翻译

JDK:java软件开发工具包,内部包含了代码的编译工具和运行工具(编译工具就是翻译工具,只是叫法不同-javac.exe)

编译成功,会自动生成一个对应的.class文件(字节码文件),该文件才可以被JVM直接识别并执行

运行代码:需要使用JDK所提供的运行工具java.exe,才能把它跑到JVM虚拟机中去

计算机无法识别,所以需要进行翻译,需要用到编译工具javac.exe,那么运行为什么要提供一个工具呢?
因为编译后生成的.class字节码文件可能是一个,也可能是多个,比如有10个,那JVM到底运行哪个呢?这个时候就需要运行工具来告诉JVM运行哪个文件

编写代码的过程中,需要使用JRE中java已经写好的代码
编译代码的过程中,需要使用JDK中的翻译工具-javac.exe
运行代码的过程中,需要使用JDK中的运行工具-java.exe
代码需要运行在JVM中

JDK、JRE、JVM的关系:
JDK包含JRE和开发工具
JRE包含了JVM和核心类库
 

JDK的安装目录介绍

目录名称 说明
bin 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。
conf 该路径下存放了JDK的相关配置文件。
include 该路径下存放了一些平台特定的头文件。
jmods 该路径下存放了JDK的各种模块。
legal 该路径下存放了JDK各模块的授权文档。
lib 该路径下存放了JDK工具的一些补充JAR包。

bin目录下存放了JDK的各种工具命令。如编译命令:javac和运行命令:java
命令提示符窗口:通过指令去操作计算机
快速进入bin目录所在的DOS命令提示符:在图形化界面下,找到bin文件(javac.exe等编译执行命令都在bin文件下),在路径栏输入cmd--->敲回车--->直接打开bin目录所在的命令提示符窗口,就不用再一级一级地去找文件了


 

配置环境变量

配置了path环境变量后,不论你的原文件(.java)存放在哪个盘符里,它都可以找到bin目录下的javac.exe(编译工具进行编译,生成.class文件)和java.exe(运行工具运行编译后的文件)
如果不配置path环境变量,你只能在JDK的安装目录bin目录下才能使用javac和java工具,所有的源代码都要放在bin目录下才能去编译和运行,如果有成千上万个java文件,这成千上万个都要放在bin目录下,很麻烦,也不便于管理
配置path环境变量的作用:能够在任意盘符任意目录(文件夹路径)下,都能访问到bin目录中的javac和java工具(而不是手动的把每个java源文件放到bin目录下才能访问)

配置path环境变量:
win+E找到左侧的计算机(因为有些电脑的桌面上的计算机图标只是一个快捷方式,并不是它真正所在的位置)--->右键--->属性--->高级系统设置--->环境变量-->新建--->变量名输入JAVA_HOME----将JDK的安装路径复制到变量值中去,注意:不带bin目录,如:D:\Develop\jdk12.0.2

注意:变量名不一定是JAVA_HOME,但建议叫JAVA_HOME,因为后续使用的软件,会和我们当前的设置进行匹配,它只会识别JAVA_HOME这个名称

JAVA_HOME创建完成后,对path进行配置
建议不使用系统设置窗口中上面的"用户变量"配置patht,因为一个电脑可以对应多个用户
建议在下面的"系统变量"中进行配置
在"系统变量"下选择path---编辑文本---用两个%包裹名称JAVA_HOME,加上\bin,最后分号结束-%JAVA_HOME%\bin;
%就是一个引用符号,这里引用了JAVA_HOME所记录的地址

校验:
打开DOS窗口,输入javac命令 可以查看到安装的JDK的版本信息等

目录

基本知识

JDK的安装目录介绍

配置环境变量

常用的DOS命令

变量

类型转换

常量优化机制

求个位、十位、百位…

自增自减

异或

java结构

比较运算符==

分支语句switch

for循环

水仙花

无限循环(死循环)

三种循环的区别

IDEA工具

数组

方法

伪代码

return语句

方法重载

Debug

进制转换

左移/右移

异或

数据交换

对象

垃圾回收

成员变量/局部变量

private修饰符

this

对象的三大特征

封装

构造方法

bean类

API

next()、nextLine()、nextInt()

String类

字符串的比较

StringBuilder类

StringBuilder和String相互转换

GIT:版本控制系统

pull/clone

System.exit(0)

static静态方法/成员

继承

耦合

Super关键字

方法重写

继承中构造方法的访问super()特点

开发原则

抽象方法

抽象类的注意事项

模板设计模式

final关键字

静态代码块


若在C盘下输出javac也能查看到内容,就说明是配置成功的

常用的DOS命令

操作 说明
盘符名称: 盘符切换。E:回车,表示切换到E盘。
dir 查看当前路径下的内容。
cd 目录 进入单级目录。cd itheima
cd .. 回退到上一级目录。
cd 目录1\目录2... 进入多级目录。cd itheima\JavaSE
cd \ 回退到盘符目录。
cls 清屏。
exit 退出命令提示符窗口。

变量

变量:在程序运行过程中,其值可以发生改变的量。

变量就是内存中的存储空间,空间中存储着经常发生改变的量(数据)

变量的作用域:变量只在它所在的大括号{}中有效
当这个大括号中的代码执行完毕后,内部所[定义]的变量就会从内存中消失,所以在大括号外边就不能使用了,因为它已经消失了

空常量null是一个特殊的值--空值,它只有一个值:null,是不能在输出语句中直接去打印的

如果在class的前面加了public,class后面直接跟类名,就要保证class后面的类名称和文件名称一定要一致;如果没有加pulbic这个限制,直接是形如:class HelloWorld{……},类名和文件名就不用保持一致,为了java语言的严谨,需要在前面加上public,类名和文件名保持一致--public class HelloWorld{}

main方法----程序运行时的入口点

main不是关键字(它在编辑器中没有高亮显示),但是可以将其理解为比关键字更为关键的一个单词,因为JVM在执行代码的时候,只会识别该单词。如果不写成main,JVM就会认为你的程序没有入口点,我跑不了,我无法运行

类型转换

隐式转换:
小范围转大范围---自动转换
隐式转换的简单理解:将4升的水,倒入8升的桶,可以直接倒入(因为容器够大,可以直接装的下)

强制转换:

大范围转小范围---目标数据类型 变量名 = (目标数据类型)值或者变量; 如:double num1 = 5.5;
int num2 = (int) num1;

在运算的过程中,尽量减少使用强制转换,因为会发生精度损失
精度损失的简单理解:将容积为8升的容器中的水,倒入容积为4升的容器中,如果不超出了4升,就洒了,这个洒出来的就是精度损失。

java存在常量优化机制(只能用于常量):
byte a = 3 + 4;
这里的3和4是两个常量,java存在常量优化机制,会在编译的时候就让3和4相加,然后会自动判断7是否在byte的取值范围(-128-127)内
-----如果不在范围内:编译出错
-----如果在范围内:编译通过
以上是常量3和4先相加,结果等于7,再进行编译,7在byte范围内,编译通过

byte b = 300 + 4;
编译错误:不兼容的类型-从int转换到byte可能会有损失
300+4=304,因为byte的取值范围是-128~127,304不在byte类型的取值范围内

常量优化机制

byte b = 300 + 4;
编译错误:不兼容的类型-从int转换到byte可能会有损失
300+4=304,因为byte的取值范围是-128~127,304不在byte类型的取值范围内

定义long类型的变量需要在数值后面加上L,如果变量的取值是一个常量,且常量的大小不超过数据类型的大小 ,就可以不加L
正确:long num = 123;
123是整数常量,属于Int类型,把int类型给long赋值,就是小范围给大范围的,可以直接给
错误:long num = 123456789123456;
123默认是属于int类型,它是在int类型的范围内的,可以自动转换成long类型的,但是123456789123456超出了int的范围,默认的int类型是装不下它的,这时就必须在后面加上字母L,把它变成long类型,再将它交给long类型的变量num----正确写法:long num = 123456789123456L;

注意:如果不想做这么繁琐的东西,或者是不能区分开来,那么以后定义long类型时就都加L,不用记那么多的细节

求个位、十位、百位…

数值拆分公式:
个位----数值%10
十位----数值/10%10
百位----数值/10/10%10
千位----数据/10/10/10%10
………………

自增自减

注意:
自增++和自减--只能操作变量,不能操作常量
如:
变量:a++--->a = a + 1
常量:10++--->10 = 10 + 1是错误的,不符合逻辑

异或

异或---^
相同为false,不同为true;

java结构

java的结构:顺序、选择、循环

java默认的结构:顺序结构

如果if语句所控制的语句体中,是一条语句,大括号可以省略不写,但是不建议省略,因为有时候你可能不清楚它是一条语句还是两条语句,如:
if(age >= 18) 
    int a = 10;
以上代码会报错---此处不允许变量声明
正确写法:
if(age >= 18) {
    int a = 10;
}
为什么加上大括号,就编译通过了呢?因为int a = 10;虽然只有一个分号,但是编译器觉得它算是两条语句,它认为定义变量int a算一条语句,赋值=10算另外一条语句

所以综上,在今后写if语句时,大括号永远不要省略,但是别人如果省略了,你要能够看懂代码

比较运算符==

如果比较的双方都是基本数据类型,那么==号比较的都是值;如果比较的双方是引用数据类型,那么==号比较的是地址值。

分支语句switch

case给出的值不允许重复
case后面的值只能是常量,不能是变量

在switch...ca

你可能感兴趣的:(jvm,java)