java的学习
JAVA的学习
[toc]
计算机相关知识
计算机硬件
- 总线
- 中央处理器(CPU)
- 内存(主存)
- 存储设备(如硬盘,u盘,光盘)
- 输入设备(键盘,鼠标等)
- 输出设备(显示器,打印机)
- 通信设备(调制解调器,网卡)
中央处理器
英文缩写cpu,是计算机的大脑,从内存中获取指令,然后执行这些命令。
其中有控制单元:用于控制和协调其他组件的动作
算数/逻辑单元:用于完成数值运算(+-*/
)和逻辑运算(><=)
计算机内有个内部时钟,以固定速度发射电子脉冲。时钟速度越快,在固定时间段内的执行指令就越多,速度的计量单位是赫兹(hz),一赫兹相当于每秒一个脉冲,目前的单位是以千兆赫(Ghz)来表述,电脑的频率一般为千兆赫GHZ
1khz=1024hz
1mhz=1024khz
1ghz=1024mhz
cpu的核是实现指令读取和执行的部分,一个多核cpu是以一个具有俩个或者更多独立核的组件。可提高cpu的处理能力
+++
存储设备
内存:内存的数据断电缺失
永久存储数据
磁盘驱动器:即磁盘/硬盘,光驱(CD,DVD),USB闪存驱动器(即U盘,通用串行总线),软驱AB盘
+++
冯诺依曼体系结构
五大结构
运算器
完成数据加工处理的加工器
控制器
控制程序执行的控制器
存储器
记忆程序和数据的存储器
输入设备
输入数据和程序的输入设备
输出设备
输出处理结果的输出设备
+++
内存
计算机是一系列电路开关,0是关,1是开
一个0或者一个1是一个比特(bit),是计算机最小的存储单位。
计算机最基本的存储单元是字节(byte),每个字节由8个比特构成。单位是B
千字节(KB)=1024B
兆字节(MB)=1024KB
千兆字节(GB)=1024MB
万兆字节(TB)=1024GB
八个比特存储二进制的最高数是1024 ,所以存储单位进制是1024
内存(RAM) 由一个有序字节序列组成,用于存储程序及程序所需 的数据
cpu如果要调用硬盘 里的数据要优先让内存读取硬盘的数据,再有内存交付给cpu(目的是加快工作效率,硬盘慢CPU快,内存读取速度比硬盘快约10倍)
内存是带点存储,断电消失,容量有限,长期存储还得靠硬盘
内存在这一步起到的作用:
- 保存从硬盘读取的数据,提供给cpu使用
- 保存cpu的一些临时处理结果,以便下次使用或保存到硬盘
RAM最多,速度越快,但是有上限
+++
输入输出设备
鼠标、键盘
显示器、打印机
+++
通信设备
拨号调制解调器、DSL(数字用户线)、无线网络、网络接口卡、电缆调制解调器
+++
操作系统
管理和控制计算机的活动
1 | |----------------------| |
操作系统的主要任务:
- 控制和监视系统的活动
- 分配和调配系统资源
- 调度操作
+++
万维网
world wide web分为web客户端和web服务器程序。
www可以让web客户端(浏览器)访问web服务器的页面(网页)
URL统一资源定位符
URI统一资源标识符
超文本传输协议(Hypetext Transfer Protocol)http协议,https协议是具有安全性的ssl加密传输协议
万维网包含于因特网,因特网包含于互联网
架构:
B/S
browser server (通过浏览器访问服务器)
C/S
client server(通过客户端访问服务器)
+++
常用DOS命令
用win+R输出cmd调出命令提示符
切换盘
1 | C:\Users\Yee>d: |
dir:列出当前目录下的所有文件及文件夹
md:创建目录
rd:删除目录
cd:进入指定目录
cd..:返回上一级目录
cd\:返回根目录
del:删除文件
exit: 退出dos命令行
+++
创建目录/移动目录/列出目录实例
1 | C:\Users\Yee>dir |
+++
创建文件
1 | C:\Users\Yee>cd java |
1 | C:\Users\Yee\java>echo hello,my name is xingtong>1.txt |
echo指令是替代文件内容到某个文件,若无文件则创建,若存在则替代
+++
1 | C:\Users\Yee>cd java |
+++
删除文件
使用del可以删除文件
如果想批量删除一个格式的文件,如图所示有很多txt格式的文件
1 | C:\Users\Yee\java>del *.txt |
+++
删除目录
1 | C:\Users\Yee\java>rd hello.java |
1 | C:\Users\Yee\java>cd.. |
1 | C:\Users\Yee>cd java |
此时我的class1目录下的文件不为空
1 | C:\Users\Yee\java\class1>cd.. |
提示我不能删除
1 |
|
就能删除了
+++
浅识JAVA
人机交互方式
图形化界面(GUI)、命令行方式(CLI)
JAVASE 标准版 支持面向桌面型应用
JAVAEE 企业版 开发企业环境下的应用程序解决方案针对Web应用程序开发
JAVAME 小型版 支持JAVA移动端的平台
JAVA Card 支持java小程序
+++
面向对象
三大特征:封装,多态,继承
基本概念:类,对象
+++
健壮性
吸收C/C++的特点,去掉C/C++的一些容易弄错的点,例如指针、内存申请与释放,多继承等等,提供一个相对安全的内存管理和访问机制
+++
跨平台性
由于java程序的特点,使用虚拟机(JVM)运行,可以在多个平台(windows,linux等等)上运行同一个java程序。
+++
核心机制
java虚拟机:JVM
垃圾收集机制
+++
JDK
java开发工具包,其中包括JAVA开发工具和jre,开发工具包含:编译工具(javac.exe)和打包工具(jar.exe)等
+++
JRE
包括java虚拟机(JVM)和JAVA程序的核心类库,想运行JAVA程序只需要有JRE就好
+++
JVM
java运行的环境,虚拟机
+++
用命令行运行java程序
用记事本写好一个java程序,修改后缀为java
在cmd里实现
1 | //编译 |
+++
注释
与c/c++一样
1 | //单行注释 |
以下是大概的使用方法概述
首先先写一个java程序,里面包含文档注释
1 | /** |
需要设置环境变量jdk才能通过命令行打开javadoc
小技巧,在需要打开cmd的路径前加上cmd和空格点回车打开的cmd就是当前目录下的cmd
或者直接在目录上输入cmd打开的cmd也是目录下的cmd
1 | //命令行语句(尚硅谷讲的是) |
+++
也可以用idea等编译器生成文档
这里是idea的生成文档使用方法
遇到了几个问题javadoc:错误 - 无法读取 Input lenght=1
不能生成文档,是因为不能存在中文路径名。换成英文就可以了。
这样就能生成使用文档了
+++
java api 文档
api 是接口
讲解了各个类名使用方法
+++
程序编写注意事项
一个java文件中,可以有多个class
但是只能有一个public class
并且public class 后面的类名与文件名相同
程序的入口是main()方法格式 是固定的
1 | public class hello{ |
+++
编译后会生成一个或多个字节码文件,文件名与数量与java文件的class名字数量相同。
+++
开始
+++
关键字保留字
关键字:由java语言赋予特殊功能的单词或者字符串
保留字:现版本Java未使用,但以后的版本可能会使用,尽量避开使用例如goto、const
+++
标识符
对变量、方法、类,接口,包命名时使用的字符序列称为标识符(只要是能命名的都是标识符)
定义规则:由26个字母大小写,0-9 十个数字,_下划线,$,组成
注意:
- 数字不可以开头
- 不能使用关键字和保留字,可以包含关键字例如int是关键字不能使用,int_1可以使用
- java区分大小写,长度无限制
标识符不能包含空格
标识符可以为中文,但是尽量不用,以免造成编码不一致等等问题
+++
命名规范(不是强制要求,只是建议,增强代码可读性)
- 包名多单词组成时全小写,不同单词用__链接例如: java_start_day1
- 类名、接口名:多单词组成时,首字母大写: JavaStartDay1
- 变量名、方法名:多单词组成,第一个单词小写首字母,后面的单词首字母大写 :javaStartDay1
- 常量名:所有字母大写,用下划线连接:JAVA_START_DAY1
+++
变量
变量存在于内存中一个存储区域
该区域的数据在同一类型范围内不断变化
变量是程序中最基本的存储单元,包含变量类型、变量名、存储的值
变量用于在内存中保存数据
变量必须先声明后使用
用变量名访问这块区域的数据
变量的作用域一般为所定义的{}内
变量在作用域中才可生效
同一个作用域中,不可以定义重名的变量
+++
变量类型
+++
基本数据类型
整形:byte、short、int、long
浮点型:float、double
字符型:char
布尔型:boolean
+++
引用数据类型
类(class)、接口(interface)、数组(array)
+++
整型
类型 | 长度 | 取值范围 |
---|---|---|
byte | 8bit位(1byte) | -128~127 即-2^7^~ 2^7^-1 |
short | 16bit位(2byte) | -32768~32767 即-2^15^~2^15^-1 |
int | 32bit(4byte) | -2147483648~2147483647 即-2^31^~2^31^-1 |
long | 64bit(8byte) | -9223372036854775808~9223372036854775807 即-2^63^~2^63^-1 |
char | 16bit | '\u0000'~'\uffff' 即0~65535 |
赋值long的时候需要在末尾加一个L或l
1 | long a=23123213L; |
+++
浮点型
单精度float,精确到小数点后7位数
双精度double,精度是float的俩倍
浮点型由两种表达方式
十进制:4.23 42.33f 3.00
科学计数法:2.19e4 4.44E5 100e-2
类型 | 长度 | 取值范围 |
---|---|---|
float | 4byte | -3.403E38~3.403E38 |
double | 8byte | -1.798E308~1.798E308 |
java定义浮点型默认为double,声名float型常量则需要在后面加==f或F==
1 | float a=5.32f; |
+++
字符型
char 1字符=2字节
1 | //定义char型变量,用''; |
+++
转义字符
字符 | 含义 |
---|---|
\ddd | 1~3位八进制数表示的字符 |
\uxxxx | 1~4位十六进制表示的字符 |
\' |
单引号’ |
\" |
双引号” |
\\ |
反斜杠\ |
\r |
回车 |
\n |
换行 |
\f |
走纸换页 |
\b |
退格 |
\t |
水平制表符tab键 |
+++
布尔型
boolean只有两个值==true和false==,即真与否
1 | boolean a=true; |
+++
类型转换
自动类型提升
范围小的和范围大的相运算,应用范围大的类型接收结果。
1 | byte a=12; |
+++
强制类型转换
byte、short、char运算时该怎么办呢
1 | byte a=12; |
+++
当long型定义时忘记写L时,会认为定义是int型,自动提升为long型
1 | long l1=123213; |
+++
整型常量默认int,浮点型默认double
1 | byte b=12; |
+++
String字符串
引用数据类型,不算基本数据类型
1 | //声明String |
+++
进制
计算机常用八进制,二进制,十六进制,十进制。
二进制 0b 0B 开头
八进制 0o 0O 开头
十六进制 0x 0X 开头
1 | int a1 = 0b1100;//二进制 |
计算机内最高位 0正数 1负数
计算机底层以补码的方式存储数据!
二进制转八进制,三位二进制数看成一位八进制数范围0-7,八进制转二进制,每一个数字转为三位二进制数字拼接
二进制于十六进制转换也是如此
1 | 二进制 000 101 111 |
+++
运算符
算术运算符
1 | + |
+++
赋值运算符
符号 | 效果 |
---|---|
= |
赋值,a=3,c=b=6; |
+= |
a+=4同a=a+4 |
-= |
a-=4同a=a-4 |
/= |
a/=4同a=a/4 |
%= |
a%=4同a=a%4 |
*= |
a*=4同a=a*4 |
注意,a+=5与a=a+5,不同点,前者不会改变数据类型
1 | //即 |
+++
比较运算符
运算符 | 运算 |
---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
instanceof |
检查是否属于对象”hello” instanceof String 返回true |
运算结果均为布尔型
+++
逻辑运算符
符号 | 作用 | ||
---|---|---|---|
& |
逻辑与 | ||
&& |
短路与 | ||
` | ` | 逻辑或 | |
` | ` | 短路或 | |
^ |
异或 | ||
! |
非 |
1 | //&与&& 的区别 |
1 | // | 与 || 的区别 |
短路与和短路或效率稍微高一些
a | b | a&b | a&&b | `a | b` | `a | b` | !a |
b^a |
|
---|---|---|---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false | |||
true | false | false | false | true | true | false | true | |||
false | true | false | false | true | true | true | true | |||
false | false | false | false | false | false | true | false |
异或:先取反,在判断是否或
+++
位运算符
位运算符 | 作用 | |
---|---|---|
^ |
异或,两个二进制数中位数相同为0,不相同为1 | |
` | ` | 或,返回两位数都为0的值,否则返回1 |
~ |
取反,把二进制数的0变为1,1变为0 | |
>> |
右移,a>>n,把a的二进制数向右移动n位,相当于a=a//2^n^,可以做除法,当a>>1的时候相当于a//2 | |
<< |
左移,a<<n,把a的二进制数向左移动n位,相当于a=a* 2^n^,可以做除法,当a<<1的时候相当于a* 2 |
|
& |
与,返回两位二进制数都为1 的部分,可以判断奇偶,例3&1=1,2&1=0,1的二进制是01,2是10,3是11,1&3即01与11都为1 的数是个位的1,2&1没有相同位数上的1,即为0,通过这样的方式判断奇偶 |
这里是异或的示例
这里是或的示例
这里是取反示例
这里是左移与右移
这里是与的示例
补充:右移时,如果是负数,用1补左边,正数用0补前面
>>>
无符号右移,无论正数负数都是左边补0
1 | //位运算的一些小用法 |
+++
三目运算符
格式:条件表达式 ? 表达式1:表达式2
符合条件表达式进入表达式1,否则进入表达式2
类似: if (条件表达式){
表达式1
}else{
表达式2
}
1 | public class hello{ |
表达式有数据类型要求,字符串和整型不能同时满足
故三元运算可以转化 if-else 结构 但是 if_else 结构 不一定可以转化三元运算
1 | int m,n; |
三元运算可以嵌套使用
1 | String in = ( n > m) ? "n大" : ( ( n < m) ? "m大" : "一样大" ) ; |
+++
三元运算、单目运算,赋值运算是从右往左运算的,其他都是从左往右运算
+++
流程控制
流程控制 大体可以分为 顺序结构,分支结构和循环结构
+++
顺序结构
顺序结构 即按照顺序从上往下一步一步地执行语句
+++
分支结构
if-else分支
1 | if(判断语句){ |
+++
switch分支
1 | switch(表达式){ |
switch结构表达式的值为 int 、byte 、 short 、 char 、 枚举类型(jdk1.5新增)、 String(jdk1.7新增)
default可以不放在末尾,运行会查看满不满足case,不满族进入default,运算后检测若无break,则继续往下运行。
+++
另一种switch结构
在写代码的过程中使用switch结构,当忘记了break的书写,稍稍不留心就会出大茬子,在jdk12之中引入了一种新的switch结构,可以不需要break就可以实现结束switch结构
1 | import java.util.*; |
+++
循环结构
+++
for循环
1 | for(初始表达式[可省略,放置循环体外]:迭代条件[不可省略,为布尔值,为true运行,false退出循环]:迭代表达式[可省略,放置循环体内]){ |
+++
while循环
1 | while(循环条件[布尔值,true进入循环,false退出]){ |
+++
do….while循环
1 | do{ |
+++
循环语句的条件判断可以是true
在循环语句里设置break可以跳出循环,可以搭配if条件选择使用。
- 循环可以嵌套使用,多使用一层循环会导致计算时间大幅度上升,慎用多级嵌套
++++
输入输出
从输入设备输入数据是需要使用Scanner对象
1 | //导入包 |
+++
输出格式
1 | System.out.print();//输出一行内容,不换行 |
+++
format输出
字符串中用format函数进行精度输出
1 | >>>print("我的名字是{},小名是{}".format("kiko","suki")) |
format是一个使用起来十分强大的格式控制
1 | #冒号前面的数字是后面的字符串数字 |
format函数的另外一个输出方法
1 | #这是f-string输出方法 |