疯狂java讲义01
(出处:根据李刚老师《疯狂java讲义》视频中的知识点于此记录下来)
(1~16集文档)
编程语言的运行原理:
编译型的语言
如:C,C++
1、编译生成的目标程序(针对特定平台的机器指令),只能在特定的平台上运行。不能跨平台
2、性能好
解释型的语言
如Ruby、Python
1、需要为不同的平台提供解释器。通常它们可以跨平台运行。
2、由于每次运行时,都需要经过一次解释(转换为机器指令)。性能略差。
java希望即利用编译性语言性能好的特点、又想跨平台。
Java语言既有编译(不彻底的编译,编译成字节码文件),又有解释(每次运行时,将字节码翻译成对应平台的机器指令)
Java的性能很好,也能跨平台。
【面试题】 JVM(虚拟机)原理是什么?
Java源程序编译之后生成的是字节码文件(平台无关的),不同平台上的JVM是不同的,
不同平台JVM负责将字节码文件解释对应平台的机器指令,这样过程即可实现Java程序的跨平台。
类加载机制:反射。
内存管理:GC。
JVM代码解析、处理引擎。
【面试题】 JVM和JRE
JRE = JVM + 各种基础类库 + Java类库(String\System)
安装JDK
无论学习什么编程语言,都需要安装Software Developing Kit (SDK)
Java的SDK简称JDK
需要javac、java命令。
安装JDK的两个注意点:
(1)不需要安装JRE。
(2)不要把JDK安装在有空格的路劲下、不要安装在有中文的路径下。
安装完成后,得到如下目录结构:
bin:包含java、javac两个命令。
jre:jdk自带JRE。
lib:包含JDK的工具jar包。
src.zip:包含Java SE的源代码。
配置环境变量:
PATH:告诉操作系统到哪些路径去找类。
路径1;路径2;路径3
结论:希望在命令行使用的工具,都应该将这些工具【所在路径】添加PATH环境变量中即可。
%JAVA_HOME%/bin 其中%JAVA_HOME%引用已有的JAVA_HOME环境变量的路径
Linux、MacOS: J A V A H O M E / b i n , 其 中 JAVA_HOME/bin,其中 JAVAHOME/bin,其中JAVA_HOME引用已有的JAVA_HOME环境变量的路径。
JAVA_HOME:告诉Eclipse、Tomcat、Ant、Maven、CXF、AspectJ、Activiti…JDK安装在哪个目录。
即使你有多个JDK,你想用哪个JDK,就让JAVA_HOME指向哪个JDK。
CLASSPATH:告诉JRE到哪些路径去找类。
暂时不用配置!如果你不配置CLASSPATH,JAVA默认到当前目录下找类。
(显示后缀功能如果被关闭,电脑中毒了)
================================================
java程序的入门
java程序的最小程序单元是类
[public] class 类名
{
}
Java源程序的命名规则:
A:源程序必须以.java为后缀
B:源文件中有public类,主文件名必须与public类的类名相同
一个Java源文件只能有一个public类。但其他类可以有很多个
常用的命令:
cd:进入指定目录。win、linux通用。
dir/ls:列出当前目录下所有文件和子目录。
mkdir/md:创建文件夹
windows和linux常用特殊目录:
. :当前目录
… :上一级目录
/ : 根目录
=============================================
编译java程序
javac -d <目录> 源文件 :-d指定将生成的“字节码文件” 放到指定位置
字节码文件的命令规则为:
A 后缀名是 .class
B 主文件名总是与类名相同
一个java源文件中定义了几个类,编译时就会生成几个class文件
运行java程序
java 类名 : 系统到CLASSPATH指定路径下去找类
java -cp 目录1;目录2;目录3 :系统到cp选项所指定的系列目录下去找类
简而言之:-cp选项用于覆盖CLASSPATH环境的值
java要求一个类(并不要求是public类)必须有main方法才可以运行
main方法就是程序的入口
public static void main(String[] args)
===============================================
java程序的注释
java注释分成3种:
单行注释:
// 注释内容
多行注释:
/*
注释内容
*/
文档注释:
/**
*/
javadoc工具可以提取源程序中类之前、成员变量之前、方法之前、构造器之前、内部类之前的文档注释来生成API文档
文档注释:javadoc工具可以提取文档注释来生成API文档
Eclipse、AndroidStudio可以在编辑界面实时正在使用的成员的文档注释
API文档:为Java类提供的使用说明书。
文档注释:文档注释只有放在类、成员变量、方法、构造器、内部类之前才有意义!
javadoc默认提取public和protected成员之前的文档注释。
生成文档注释:
javadoc -d <目录> 源文件 : -d 指定将生成的“API文档”放到指定位置。
========================================================
【备注】 javadoc工具默认只提取public、protected修饰的之前的文档注释
API文档:类的使用说明书
JDK的API文档:JDK1.8API\api目录下,打开index.html
命令格式:
javadoc -d 目录 源程序
-d 目录:指定将生成的文档放到哪个目录下
文档注释中的特殊标志:@param 参数名 对参数的说明
===============================================
变量
-
变量?用于“装”数据的
形象来说,变量就相当于一个容器无论学习任何编程语言,永远都是从变量开始学的
java是“强类型”的语言:
- 所有的变量必须先声明、后使用
- 指定类型的变量,只能装对应类型的数据
强类型特别费劲,强类型语言更安全
声明变量(定义变量)
类型 变量名 [= 初始值];
标识符:
-
标识符:就是名字
标识符:可为变量、类、方法…各种各样的东西起名字 标识符的规则:
- 由字母(英文、中文、日文、韩文),数字,下划线__,$组成,但数字不能开头
- 不能是java的关键字 或保留字
关键字:java语言中一些有特殊意义的单词。关键字的所有字母都是小写。(48个)
保留字:暂时还没有使用,以后可能使用的关键字:goto、const。(2个)
直接量:true、false、null一共有53个单词不能作为标识符
====================================
类型:
java类型:基本类型、引用类型
基本类型:
整型 (byte、short、int、long)
浮点型 (float、double)
字符型 (char)
boolean型(boolean)
整型:
位 (bit) :要么是0,要么是1.
字节(byte):8个bit
2^0=o 2^4=16 2^5=32 2^6=64 2^7=128 2^8=256
2^9=512 2^10=1024(k) 2^11=2048 2^12=4096 2^16=65536
2^20=M(百万million) 2^30=G(十亿) 2^40=T
byte: 8位(能表示256个数)、取值范围:-128~127(加上0)
short: 16位(能表示65536个数) 取值范围:-32768~32767
int: 32位(能表示4G个数)、取值范围:-2G~2G-1
long: 64位(取值范围很大,无需记忆)
注意点:
A:你直接给出一个整数,整数默认是int型。
如果该整数值较小、且直接赋值给byte或short,java也可以将它当成byte、short处理
B:如果你直接给出一个巨大的整数,java不会自动把它当成long型处理。
如果希望java把该整数当成long处理,需要在整数后添加L或l(小L)后缀
C:整数一共有4种表现形式:
十进制:
八进制:以0开头
逢8进1,只能出现0~7。
十六进制:以0X开头或0x开头
逢16进1,只能出现09,af(a代表10,b代表11)
二进制:以0B开头或0b开头
逢2进1只能出现0~1
十六进制的数,在编程中非常常用,每位十六进制的数,恰好换算成4位二进制数,因此非常方便。
============================================================
浮点型:
只能装带小数部分的数。
java的浮点型,一共有2个:
float:4个字节(32位):取值更大
double:8个字节(64位):取值超大
Q1:编程时应该用float?还是double?为什么?
A1:应该用double。
浮点数都有精度丢失,但float丢失更严重。
因为现在的内存已经非常便宜,出于精度考虑,应该使用double。
浮点型的注意点:
A:直接给出一个浮点值,默认是double型。
如果你希望一个浮点值被当成float处理,必须在浮点值添加F或f。
B:浮点数会有精度丢失。
所以浮点数比较时,应该用“差值法”。
C:浮点数有两种表现形式:
– 小数形式
– 科学计数法。 数eN = 数 * 10^N
只要用科学计数法,就一定是浮点数,不可能是整数。
D:浮点值有3个特殊值:
浮点数除以0,得到无穷大。
正无穷大:正正得正,负负得正
负无穷大:正负得负
【 所有正无穷大都相等:所有负无穷大都相等 】
非数:浮点0除以0,对负数开方,得到的就是非数,NaN (Not a Number)
【 非数与任何数都不相等,与它自己都不相等】
======================================================================
字符型:
只能装单个字符(英文、中文、日文、韩文……),且单个字符要放在单引号里。
char:2个字节(16位置)
字符型的注意点:
A:字符型有3种变现形式:
-
单引号里放普通的字符。
-
单引号里放特殊的转义字符。
-
用字符的Unicode编号。十六进制
B:字符完全可以当成无符号整数使用。
字符当成无符号整数使用时,其实就是用该字符的编号
java类型可以分为2大类:数值型(整型、浮点型、字符型)
/******************
字符集:为了在计算机底层保存字符,为所有字符编号,
需要保存字符时,实际上保存该字符的编号(二进制)
读取字符内容时,读取是二进制的编号,还需要参照编号表才能得到对应的字符。
ASCII:只支持英文、数字、标点符号。
a-z: 97-97+25;
A-Z: 65-90;
0-9:48-57
\r:13 \n:10 ’: 39 (单引号的编号为39) " :34(双引号的编号为34)
GB2312:简体中文字符集
GBK:简体中文字符集
GB18030:目前简体的字符集
所谓字符集:就是为所有的字符编号。保存文件所用的字符集,和读取
=============================================================
布尔型:
boolean:只能接受true或false
类型转换:
所有数值型(7种)都可以自动转换
自动转换:取值范围小的,可以自动转取值范围大的
byte→short(-32768~32767)→int→long→float→double
char(0~65535)→int
推论:
所有整型,都可以自动转成浮点型
所有整型,都可以自动转成long型
所有数值型,都可以自动转成double型
强制转化:
上图中反过来转换,就需要强制转换
(类型)
-浮点数转整数,始终是砍掉小数部分
-强制转换,可能发生“溢出”
溢出规则:用该数-目标类型的大小*n,保证减出的差位于取值范围内
(n是倍数)
表达式类型的自动提升:
整个表达式的类型,与该表达式中最高等级的操作数的类型相同
===================================================
运算符
算数运算符
+、-、*、\、%(求余)
++、–
++:将单个变量的值加1.
放在变量之后,表示先用变量的值,再自加;
放在变量之前,表示先自加,再用变量的值;
–:将单个变量的值减1;
放在变量之后,表示先用变量的值,再自减;
放在变量之前,表示先自减,再用变量的值;
对于一些更复杂的运算,应该使用Math类,该类提供了一些工具方法,可以完成初中、高中数学运算
赋值运算符:=
=左边只能是变量
=右边可以是任何复杂的表达式
大部分时候,=右边往往都是复杂的表达式。