基础


第一周

1.JAVA特点

面向对象

简单

Java是纯面向对象语言,语法简单明了,易于掌握。

Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。

Java还会自动地收集内存垃圾,使得内存管理变得更为简单。

Java还提供了丰富的类库、API文档以及第三方开发包,还有大量Java的开源项目。

跨平台(最大的特点)

体现在:编码

java语言相比较其他语言很特殊一点就是在java中基本类型char占两个字节(16位),即在java中一个汉字就是一个char ,这是由于jvm内部统一使用unicode编码,unicode本就是一种统一的字符集编码格式( ),其为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

运行机制

2.环境配置

java8以上 win10只用

Path 下 C:\Program Files (x86)\Java\jdk1.8.0_131\bin

2.1编码coding
2.1.1 GBK

用ANSI

GBK是中国制定的国家标准信息交换用汉字编码字符集

也就是GBK国标扩展编码,扩展了繁体字

GB2312是国标基本编码,不包括繁体字

从字符编码的范围上讲ASCII < GBK < Unicode

GBK和Unicode中的英文字符都是用ASCII码进行编码,占一个字节

二者的区别是GBK中的汉字用两个字节编码,而Unicode中的汉字用三个字节编码

gbk转utf-8会中文乱码,当前使用的是GBK

2.1.2 unicode编码

unicode:为了统一所有文字的编码,产生了Unicode,把所有语言的都统一到一套编码里,这样就不会乱码了。

形式:\u+16进制 u+000~u+FFFF共 0~65536 65536个码位 这为一组编排

一共17 组编排共65536*17=1114112个码位

Unicode就像一张表,包所有的字符都编写到表中,每一个字符对应一个数字,称为码点(code point),这个数字一般不直接使用,通过不同的编码方式来使用。

于是产生了UTF-8 UTF-16 UTF-32

2.1.3 UTF-8 -16 -32

UTF-8、UTF-16、UTF-32就是将数字转换到程序数据的编码方案。

UTF是“Unicode Transformation Format”的缩写,

可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。

UTF-8是以字节位单位对Unicode编码,第0-127位字符使用1个字节来表示,和ASCII编码相同,从128号开始的字符使用2、3、4位字节来表,UTF-8又被称为可变长编码。

UTF-8编码中,使用的是变成的字节序列表示字符,字符对应的代码点(code point)可能使用的是1-4个字节,这样一个字节就是一个代码单元。一个代码点(code point)可能由1-4个代码单元(code unit)组成。

十进制Unicode编码UTF-8字节流0-127位0x000000-0x00007F0xxxxxxx(7位)128-2047位0x000080-0x0007FF110xxxxx 10xxxxxx(11位)2048-65535位0x000800-0x00FFFF1110xxxx 10xxxxxx 10xxxxxx(16位)65536-1114111位0x010000-0x10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(21位)

比如:“汉”在Unicode中的编码为0x6C49,在表格中的第三行,使用模板为:1110xxxx 10xxxxxx10xxxxxx。将0x6C49转换成二进制:0110 1100 0100 1001,将模板中的x依次替换11100110 10110001 10001001,即E6 B1 89。

2.2 命名规范

字母,数字,_,$

不能以数字开头

3.执行特点

先编译再解释

3.1编译

先编译:把.java文件编译成.class二进制文件

每一个类会有一个 类名.class文件

public class 公开类的名字要和源文件名相同

每一个类有一个main函数

代码:javac 源文件名.java

3.2解释

再解释:解释执行.class文件

想执行哪个类

代码: java 类名

4.java文件

4.1JVM

JVM(Java Virtual Machine):虚拟机,使java适用于不同的环境

java并不是直接运行在操作系统中的,而是运行在java虚拟机(jvm)中,也就是说 jvm是java代码和操作系统之间的过渡。

编译在c语言中,是指把c语言代码分析解释为二进制的机器指令,而java中的编译只是把.java文件解释成了.class文件,并没有变成机器指令,而.class文件要变成什么样的机器指令要由具体的jvm来决定。

4.2JRE

JRE(Java Runtime Environment):java运行环境,需要运行java必须的电脑环境文件,面向java程序使用者,而不是开发者

包含JVM和核心类库

包含了Java virtual machine(JVM),runtime class libraries(类库)和Java application launcher(JAVA 运行程序启动器),这些是运行Java程序的必要组件。

4.3JDK

JDK(Java Development kit):开发环境,编写java代码,编译必须的环境。

包含JRE+类库(3600多类,常用的类150个)+开发工具包(编译器javac.exe+解释执行器java.exe)

文件夹含义:

1)bin:包含了最主要的是编译器(javac.exe)

2)include:Java 和 JVM 交互用的头文件

3)lib:类库

4)jre:Java 运行环境

分类:

JDK 有三种类型。

1)J2SE:Standard Edition,标准版,是我们通常用的一个版本,从 JDK 5.0 开始,改名为 Java SE。

2)J2EE:Enterprise Edition,企业版,从 JDK 5.0 开始,改名为 Java EE。

3)J2ME:Micro Edition,主要应用于移动设备、嵌入式设备,从 JDK 5.0 开始,改名为 Java ME。

5.变量

数据类型 +变量名=变量值

6.单位换算

1TB=1024GB

1GB=1024MB

1MB=1024KB

1KB=1024byte 字节

1byte==8bit 位

7.数据类型

8个基本数据类型: 范围 范围 字节编码

byte: 1字节 -27~27-1 -128-127

short: 2字节 -215~215-1 -32768~32767

int: 4字节 -231~231-1 过大

long: 8字节 -263~263-1 过大 范围大于int加L

float: 4字节 -3.4E+38~-1.4E-45 1.4E-45~3.4E+38 加f(F)

double: 8字节 -1.7E+308~-4.9E-324 4.9E-324~1.7E+308 范围大于float时加D

boolean: 1字节 true/false

char: 2字节 0~65535 ASCII码和unicode字符集(万国码)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMaXsBad-1644809424929)(.\ASCII.jpeg)]

8.转义字符

\n 换行

\t 制表符 8个空格

\\ 反斜杠

\’ 单引号

\" 双引号

8.1 String字符串

可拼接 包含""内所有内容

9.变量赋值 2.10

自动提升,手动下降

9.1自动转换

1.两种类型要相互兼容

2.目标类型(等号左边)范围要大于 源类型(等号右边)

按照 byte short int long float doble 升序 从左往右转换

当一个等式中包含了多种兼容类型,结果为最大类型

但是short 和byte的结果为int,整数的结果默认为int

特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。

byte a=10;
short b=a;

double d1=input.nextInt();
9.2强制类型转换

强制类型转换,手动下降

1.两种类型要兼容

2.目标类型(等号左边)小于源类型(等号右边)

按照 byte short int long float double 升序 从右往左转换

可多级跨越

int a=10;
short b=(short)a;
short b1 = -10;
		char ch1 = (char)b1; 
// 这里表示强制将short类型转换为char类型  如果short类型存放的数值不能找到对应的字符映射 将显示为 ? 
//short可正可负,char只能为正。就找不到为?
9.1强转特殊类型
大范围强转小范围,且超出小范围时,会有精度丢失

例:16位的short转byte

short a=400;

byte b=(byte)a;

System.out.println(b);

此时b的值位-122
400的二进制位:0001 1001 0000
转为目标byte8位,取后8位1001 0000

//整数的原码 反码 补码是一样的
//负数的原码 反码 补码不一样
    反码为符号位不变,其他位按位取反
    补码位反码+1
//而正常转换得到的负数二进制为补码,要反转成原码
    -1后按位取反得到十进制数
-1:1000 1111
符号位不变,其他位按位取反:1111 0000
除去符号位为:111 0000=64+32+16=112
    加上符号位为:-112

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORrpDtVq-1644809424931)(.\原码反码补码.jpg)]

10.运算符

10.1算数运算符

/ 正斜杠

%

10.2一元运算符

++ 自加

– 自减

10.2.1 单独存在时

a++和++a都等于 a=a+1

a–和--a都等于 a=a-1

10.2.2 非单独存在

如果++或者--在前++a, 那么先执行++或者-- 再执行其他的语句

如果++或者--在后 a++,那么先执行其他的 再执行++或者–

10.3赋值运算符

=

-=

+=

*=

/=

%=

10.4关系运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jHkQ81q-1644809424933)(.\关系运算符.jpg)]

10.5逻辑运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GfUXDYNp-1644809424934)(.\逻辑运算符.jpg)]

10.5.1 && ||

短路与 &&

一旦找到第一个不成立的表达式,后序不再执行。

短路或||

一旦找到第一个成立的表达式,后序不再执行。

10.5.2 & |

普通与

找到不成立表达式依然执行后序

普通或

找到成立表达式依然执行后序

10.6三元运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHkFryZm-1644809424934)(.\三元运算符.jpg)]

很多时候三元运算符可以和if-else语句进行互换,它们两个可以等价的实现判断的效果。

但是三元运算符与if-else语句也还是有不同之处 :

第一:很多时候三元运算符可以和if-else语句进行互换,它们两个可以等价的实现判断的效果。但是三元运算符与if-else语句也还是有不同之处

第二,两者的性能不同,三元运算符的运算性能相对于if-else语句来说要高一些,但是在一些小型的applet开发和日常学习开发中可以忽略不计。

第三,两者使用范围不同,在ireport的一些动态执行的情况下,只能用三元运算符而不能用if-else语句,当然在大多数情况下两者是可以等价互换的。

第四,两者的语言特性不同,三元运算符涉及到一种成为双目数值提升(binary numeric promotion)的语言特性。所谓的双目数值提升,在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下:

1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型

2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型

3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型

11.输入 Scanner

import java.util.Scanner;

Scanner input=new Scnanner(System.in);
String str=input.next();输入第一个空格前的字符

String str=input.nextLine();输入所有包括空格 但是不建议使用,经常出错

String str=input.nextLine().CharAt(x);输入指定位置字符,是一个数组,从0开始,有空格时next()不适用

输入int

int a=input.nextInt();

输入double

double a=input.nextDouble();

11.包

包用于区分同名的文件,实际上就是文件夹。

命名规范:全部小写,以点分割,域名倒置,不能以点开头或者结尾。

com.qfedu.test1

包的声明要永远放在文件的第一行

12分支结构

12.1 if结构

语法:

boolean

if(布尔表达式){
//代码块1
}

12.2 if-else结构

语法:
if(布尔表达式){
//代码块1
}else{
//代码块2
}

一定要放在前一个if的{}后面,不推荐换行

12.3 多重if

语法:
if(布尔表达式1){
//代码块1
}else if(布尔表达式2){
//代码块2
}else if(布尔表达式3){
//代码块3
}else{
//代码块4
}

12.4 嵌套if

语法:
if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}

12.5 switch结构

允许类型

byte short int char String 枚举

switch(变量|表达式){
case 值1:
逻辑代码1;
case 值2:
逻辑代码2;
case 值n:
逻辑代码n;
default:
未满足时的逻辑代码;
}

如果不写break;

会依次向下执行知道break

default可以放在任何位置

case 值1:
case 值2:
case 值n:
逻辑代码n;

1-2-n都执行代码逻辑n