Java基础学习
核心技术点:
Java基础语法
面向对象
API
Eclipse开发工具的使用
集合的底层原理
基本算法
jvm参数
JDK8的部分特性
IO、线程、套接字、反射使用
EasyMall项目开发
Java基础
Java简介,跨平台
1995由SUN公司提供的,互联网首选的语言,是大数据的基本语言。 --简单/安全/完全面向对象/跨平台。
跨平台?基于JVM( JVM:Java虚拟机),针对不同的操作系统开发了不同的虚拟机,将java程序交给虚拟机,虚拟机转化为当前操作系统所能理解的指令。然后操作系统再根据指令执行代码。
JDK、JRE、JVM的关系:
JVM–Java Virtual Machine–java虚拟机,是Java能够跨平台的前提。
JRE–Java Runtime Enviroment–JAVA运行时环境,包含JVM+核心类库。
JDK–Java Development Kit --JAVA开发工具包,开发工具+JRE。
jdk的发展历程:
Oak --James Gosling
JDK1.0–JDK1.1–JDK1.2(GUI)–JDK1.3–JDK1.5(反射) --JDK1.5(JDK5.0)–JDK1.6(JDK6)–JDK1.7(JDK7.0)–JDK1.8–JDK1.9(几乎不用,停止维护)–JDK10–JDK11
Java技术结构
JAVASE–Standard Edition–标准版
JAVAEE–Enterprise Edition–企业版
JAVAME–Micro Edition–微型版(转型成Android)
JDK的下载和安装,入门程序
官网地址:www.oracle.com
注意:在安装过程中需要指定安装目录–尽量不要使用C盘,安装目录中尽量不要出现空格和中文。
将Java程序翻译成当前操作系统能够读懂的指令。 --编译–编译出来的class文件与类名对应
编译命令:javac 要编译的.java文件
运行命令:java要运行的class文件的名字 --一个class文件对应一个类。
公共类:要求类名和java文件名必须一致。
Demo.java
public class Demo{
public static void main(String[] args){
System.out.println(“Hello World !”);
}
}
javac Demo.java
java Demo
环境变量配置、包
1、环境变量
环境变量–给当前的环境允许置顶一些参数。
新建一个环境变量:JAVA_HOME,值是jdk的安装路径–D:\java\java1.8
编译另一个环境变量:Path,添加D:\java\java1.8\bin
2、包
用文件夹表示包
package cn.tedu.exer;
public class Demo{
public static void main(String[] args){
System.out.println(“I Love Java”);
}
}
将Demo.java放到D:\java\data\cn\tedu\exer
cd D:\java\data
运行:java cn.tedu.exer.Demo
快速创建目录方法:
D:\java\data>javac -d D:\java\data Demo.java
javac:用于编译的命名。
-d:参数,表示在编译的时候需要将包生成对应的文件夹。
D:\java\data 表示编译之后产生的文件夹的存放位置。
D:\java\data>java cn.tedu.exer.Demo
关键字、标识符
关键字
在Java中有特殊含义的单词 --53个关键字 --2个关键字到目前为止没有使用,也称为保留字:goto,const。
注意:在Java中,所有关键字都是小写的。
标识符
在程序中自定义的名称.例如Demo。
定义规则:可以使用字母(常见语言的基本字符)、数字、_、 ,虽然可以使用 ,虽然可以使用 ,虽然可以使用,但是要尽量减少使用。可以使用中文命名,但是不推荐。不能使用关键字。数字不能开头。严格区分大小写。要做到见名知意。
驼峰命名法
类名/接口名:如果名字由多个字符组成,那么每一个单词的首字母要大写。–HelloWorld Demo
变量名/方法名:如果由多个单词组成,那么第一个单词的首字母小写,其余单子的首字母大写。 --helloWord demo
常量名:无论由几个单词组成,所有字母全部大写,每一个单词之前用 _ 隔开 --HELLO_WORLD DEMO
包名:无论由几个单词组成,所有的字母全部小写,每一个单词之前用 . 隔开。 --cn.tedu.exer
注意:main是标识符。
复习、注释
复习
1、Java的跨平台:JVM是跨平台的前提,针对不同的操作系统,有不同的JVM. --JAVA语言是跨平台的,但是JVM不是。
2、Java的技术结构:JAVASE、JAVAEE、JAVAME
3、入门程序:Java程序必须放在Java文件(后缀名师.java),一个Java文件中,可以存放多个Java类,但是智能有一个公共类(用public修饰的类–要求Java文件名和类名一致)。每一个Java类在编译完成之后都会产生一个class文件(字节码文件)。
4、javac -d 存放位置 要编译的java文件
5、java 包名.类名
6、关键字:在Java中有特殊含义的单词 --53个,2个保留字:goto、const --所有的关键字都是小写。
7、标识符:在Java中自定义的名称 —可以是字母、数字、_、$组成,数字不能开头,不能使用关键字,大小写敏感,见名知意。
注释
用于解释说明的文字。
格式
单行注释 //注释文字
多行注释 /注释文字/
文档注释 /*注释文字/ --文档注释中的内容可以提取出来形成文档。
javadoc Demo.java
计算机常量、进制
字面量
整数常量:所有的整数 6、15、10000
小数常量:所有的小数 3.27、100.9、2.0
字符常量:将一个字母、数字、符号用‘’标识起来 ‘a’、‘9’、‘+’、‘ ’
字符串常量:将一个或多个字符用“”标识起来“abc”、“2”、“”
布尔常量:true和false --逻辑值
空常量:null
进制
计数方式
二进制:0~1,满2进1,1+1=10,11+1=100,在JDK.7之前,程序中不允许定义二进制数字,从JDK1.7开始,允许在程序中定义二进制数字。 --以0b/0B作为开头,0b00011,0B101101
八进制:0~7,满8进1,7+1=10,17+1=20,77+1=100,要求以0作为开头,表示5应该是05
十进制:0~9,满10进1,数字如果没有特殊表示,就默认是十进制。
十六进制:09,af,满16进1,8+1=9,9+1=A,A+1=B,F+1=10,39+1=3A,99+1=9A,9F+1=A0,FF+1=100.要求以0X/0x作为开头 0x5:十六进制的5
进制及转换
十进制转二进制:除以2,然后取余数倒排
将13转换成2进制:13=1101
将27转换为2进制:27=11011
将二进制向十进制转化:从低位次开始,按位次乘以2的位次次幂,然后求和
1101=12(0次幂)+12(1次幂)+12(2次幂)+12(3次幂)=13
100110=38
十进制向其他进制转化:除以对应的进制,然后取余数倒排。
其他进制向十进制转化:从低位次开始,按位次乘以进制的位次次幂,然后求和。
二进制向八进制转化:从低位次开始,每三位二进制划分为一组,产生一个八进制数字,最高位可能不足三位,补0,补齐3位,然后也产生一个八进制数字。 —三变一
10101110100=02564
八进制向二进制转化:一变三 —每一位八进制都会产生三位二进制数字,不足三位补0
二进制向十六进制转化:四变一
十六进制向二进制转化:一变四
小数转二进制:了解即可
注意:绝大部分小数转化为二进制是表示不精确的,导致计算机在存储小数的时候是不精确的。
变量、基本数据类型
变量
数据类型 变量名 = 数据;
int i = 5;
//变量的声明
int j;
//变量的赋值
j = 6;
//定义同一类型数据
int a,b,c;
double d;
注意:无论是,;都是英文格式。
扩展:存储单位
在计算机中,是以二进制形式来存储数据,每一位二进制在内存中称之为是一“位”(bit简写为b),8位=1字节(byte,简写为B),1024B=1KB ->MB->GB->TB->PB
100Mb = 12.5MB
3GB=3000MB(按1000算,国际通讯领域惯例)
数据类型
基本数据类型
1、数值型
(1)整数型
a、byte —字节型—1个字节-----128~127
byte b1 = 25; byte b2 = 127;
b、short —短整数—2个字节— -2(15次方)+2(15次方)-1->-3276832767
c、int—整形—4个字节— -2(31次方)~ +2(31次方)-1 —在java中整数默认为int类型。
d、long—长整形—8个字节— -2(63次方)~ +2(63次方)-1—需要在结尾添加l/L作为标识。
(2)浮点型
a、float—单精度–4个字节—大概-10(38次方)~10(38次方)—需要在结尾添加f/F作为标识。
float f = 3.5f;
b、double—双精度—8个字节—大概-10(308次方)~10(308次方)—在Java中小数默认为double类型。
double d = 2.64; double d2 = 5.12D; double d3 = 7.33d; 现在D和d可以省略,所以写与不写都可以。
double d = 4e4;标识410的4次方,标识十进制的科学计数法。
doubel d =0x5p3; 表示16进制的科学计数法 xpy表示x2的y次方。
2、字符型
(1)char—字符型—2个字节—0~65535
char c = ‘a’; char c2 = ‘4’; char c3 = ‘\u2398’;
扩展:
字符在存储过程中需要按照某种规则转化为数字,这种转化规则称之为编码。记录编码形成的表格形式称之为编码表–码表。
所有的码表必须要兼容西欧码表,意味着无论是那张码表,前256个字符是一样的,而且前256个字符永远只占用1个字节。
ISO-8859-1—西欧码表–一个字节1个字符 ‘a’
gb2312–国标码—gbk—2个字节表示1个字符—2个字节1个字符–收录了绝大部分常见的简体汉字以及一部分的繁体汉字
Unicode编码体系:万国码体系—收录了常见语言的常见字符。utf-8–3个字节1个字符,utf-16—2个字节1个字符
(2)转义字符
制表符 ‘\t’ 回车’\r’ 换行‘\n’ 反斜杠‘\’ 单引号‘'’ 双引号‘"’
3、布尔型
boolean—布尔型—true/false
引用数据类型
数组—[] 类—class 接口—interface
数据类型的转换
自动类型转换/隐式转换
byte b = 5;
int i = b;
其他举例:
int i = 7;
long l = i;
float f = 3.57f;
double d = f;
规律一:小的类型可以自动转化为大的类型
public class TypeChangeDemo{
public static void main(String[] args){
byte b = 5;
int i = b;
System.out.println(i);
}
}
long l = 10;—Java
long类型—如果一个整数在int的范围内,那么在赋值给long类型的时候可以不加L;
int i = 10;
float f = i;
规律二:整数可以自动转化为小数,但是可能产生精度损失。
float f = 500;
规律三:字符可以自动转化为整数
shor类型和char类型范围没有完全重合也不能完全包含
short s = ‘a’; —可以 —'a’是字面量,是一个确定的值。所以在编译的时候就能确定’a’的值是否在short的取值范围内;如果在这个范围内,就允许转换。
char c = 97; —可以 ----97是字面量,是一个确定的值。所以在编译的时候就能确定97的值是否在char的取值范围内;如果在这个范围内,也允许转化。
char c = ‘a’;
short s = c; —不可以 —c是变量,所以在编译期间只能确定c是一个char类型的值但是不能确定c的具体值;就会在编译期间比对两个类型之间是否能够完全转化,发现char类型不能完全转化为short,所以认为这个值会超过short取值范围的风险,因此不允许转化。
强制类型转换/显示转换
int i = 5;
byte b = (byrte)i;标识将变量i强制转换为byte类型之后再复制给变量b。
注意:大类型可以强转为小类型,但是在转化的时候因为字节的损失,可能导致数据不准确。
算数运算符
算数运算符
-
-
- / % ++
-
byte/short/char在参与运算的时候会自动提升为int
Java是一门类型严格的语言,所以同一个类型晕眩完成之后结果是同一类型。
小类型和大类型同时运算,结果一定是大类型。
整数/0 ArithmeticException —算数异常
非零小数/0 非零数字/0.0 infinity --无穷大
0/0.0 0.0/0.0 0.0/0 NaN --Not a Number — 非数字
% —取模运算 —取余运算
赋值运算符
除了=以外,其他的符号都是相当于在这个变量的基础上进行运算
int i = 10;
i /= 3; -> i = 3
除了=以外,其余的符号都要求这个变量必须有值
关系运算符
==判断两个值是否相等的 !=判断两个值是否相等的 > < ≥ ≤
运算的结果一点事逻辑值 —true/false
int i = 3,j = 5;
i == j --false
i ≤ j --true
逻辑运算符
&—与And | —或Or !—非 Not ^—亦或 &&—短路与 ||—短路或
针对逻辑值进行运算的。
true&true=true true&false=false false&true=false false&false=false
true&true=true true&false=true false&true=true false&false=false
!true=false !false=true
true^true=false true^false=true false^true=true false^false=false
&&:运算规则和&一致的。如果两边的表达式的结果是false,则后边的表达式就不再运算了,整个结果确定为false
||:运算规则和|一致的。如果前边的表达式的结果是true,则后边的表达式不再计算,而整个结果确定为true
||在&&前边的时候能够吧&&短路掉,但是&&在||前边,不能短路
位运算符
三元运算符