Java基础
01、打开CMD的方式
- 开始+系统+命令提示符
- win键+R 输入cmd打开控制台(推荐使用)
- 在任意的文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口
- 资源管理器的地址栏前面加上cmd路径
管理员方式运行:选择以管理员方式运行
02、常用Dos命令
#盘符切换
#查看当前目录下的所有文件 dir
#切换目录 cd change directory
cd..
#清理屏幕 cls (clear screen)
#退出终端 exit
#查看电脑的ip ipconfig
#打开应用
calc
mspaint
notepad
#ping命令
ping www.baidu.com
#文件操作
md 目录名 MD——建立子目录
rd 目录名 RD——删除子目录命令
cd> 文件名 CD——改变当前目录
del 文件名
03、DOS命令总结
Windows命令
Net命令
net use \\ip\ipc$ " " /user:" " 建立IPC空链接
net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: \\ip\c$ 登陆后映射对方C:到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup administrators 用户名 /add 把"用户"添加到管理员中使其具有管理员权限,注意:administrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与"目标IP"主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \\ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:"-w数字"用于设置超时间隔。
ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:"-l[空格]数据包大小";"-n发送数据次数";"-t"指一直ping。
ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数"/all"显示全部配置信息
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删 除除只读、隐藏、系统、存档以外的文件。例如"DEL/AR *.*"表示删除当前目录下所有只读文件,"DEL/A-S *.*"表示删除当前目录下除系统文件以外的所有文件
IO命令
del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)
move 盘符\路径\要移动的文件名 存放移动文件的路径\移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖
fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令
at id号 开启已注册的某个计划任务
at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止
at id号 /delete 停止某个已注册的计划任务
at 查看所有的计划任务
at \\ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机
finger username @host 查看最近有哪些用户登陆
telnet ip 端口 远和登陆服务器,默认端口为23
open ip 连接到IP(属telnet登陆后的命令)
telnet 在本机上直接键入telnet 将进入本机的telnet
copy 路径\文件名1 路径\文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件
copy c:\srv.exe \\ip\admin$ 复制本地c:\srv.exe到对方的admin下
cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件
copy \\ip\admin$\svv.exe c:\ 或:copy\\ip\admin$\*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要复制的文件或目录树 目标地址\目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\server.exe 登陆后,将"IP"的server.exe下载到目标主机c:\server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送
tftp -i 对方IP put c:\server.exe 登陆后,上传本地c:\server.exe至主机
ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)
route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface
arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息
start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令
mem 查看cpu使用情况
attrib 文件名(目录名) 查看某文件(目录)的属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性
dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间
date /t 、 time /t 使用此参数即"DATE/T"、"TIME/T"将只显示当前日期和时间,而不必输入新日期和时间
set 指定环境变量名称=要指派给变量的字符 设置环境变量
set 显示当前所有的环境变量
set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量
pause 暂停批处理程序,并显示出:请按任意键继续....
if 在批处理程序中执行条件处理(更多说明见if命令及变量)
goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:":start"标签)
call 路径\批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)
for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)
echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置
echo 信息 在屏幕上显示出信息
echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中
findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello
find 文件名 查找某文件
title 标题名字 更改CMD窗口标题名字
color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
prompt 名称 更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为:EntSky\ )
ver 在DOS窗口下显示版本信息
winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
md 目录名 创建目录
replace 源文件 要替换文件的目录 替换文件
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
more 文件名 逐屏显示输出文件
doskey 要锁定的命令=字符
doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=
taskmgr 调出任务管理器
chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误
tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口
exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe
path 路径\可执行文件的文件名 为可执行文件设置一个路径。
cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;
regedit /e 注册表文件名 导出注册表
cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D:\test.txt /D pub 设定d:\test.txt拒绝pub用户访问。
cacls 文件名 查看文件的访问用户权限列表
REM 文本内容 在批处理文件中添加注解
netsh 查看或更改本地网络配置情况
IIS服务命令
iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)
iisreset /start或stop 启动(停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 显示所有Internet服务状态
iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动
iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机
iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务
iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。
FTP 命令
ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。
-d 使用调试方式。
-n 限制ftp的自动登录,即不使用.netrc文件。
-g 取消全局文件名。
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ascii 设定以ASCII方式传送文件(缺省值)
bin 或 image 设定以二进制方式传送文件
bell 每完成一次文件传送,报警提示
cdup 返回上一级目录
close 中断与远程服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连接,可指定连接端口
delete 删除远端主机中的文件
mdelete [remote-files] 删除一批文件
mkdir directory-name 在远端主机中建立目录
rename [from] [to] 改变远端主机中的文件名
rmdir directory-name 删除远端主机中的目录
status 显示当前FTP的状态
system 显示远端主机系统类型
user user-name [password] [account] 重新以别的用户名登录远端主机
open host [port] 重新建立一个新的连接
prompt 交互提示模式
macdef 定义宏命令
lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
chmod 改变远端主机的文件权限
case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
cd remote-dir 进入远程主机目录
cdup 进入远程主机目录的父目录
! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip
MYSQL 命令
mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。
(例:mysql -h110.110.110.110 -Uroot -P123456
注:u与root可以不用加空格,其它也一样)
exit 退出MYSQL
mysqladmin -u用户名 -p旧密码 password 新密码 修改密码
grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
use mysql;
show tables; 显示库中的数据表
describe 表名; 显示数据表的结构
create database 库名; 建库
use 库名;
create table 表名 (字段设定列表); 建表
drop database 库名;
drop table 表名; 删库和删表
delete from 表名; 将表中记录清空
select * from 表名; 显示表中的记录
mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的\\mysql\\bin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb 是一个文本文件,文件名任取,打开看看你会有新发现。
win2003系统下新增命令(实用部份):
shutdown /参数 关闭或重启本地或远程主机。
参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。
例:shutdown /r /t 0 立即重启本地主机(无延时)
taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。
参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。
tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。
参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。
Linux命令
要区分大小写
uname 显示版本信息(同win2K的 ver)
dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。
cat 文件名 查看文件内容
cat >abc.txt 往abc.txt文件中写上内容。
more 文件名 以一页一页的方式显示一个文本文件。
cp 复制文件
mv 移动文件
rm 文件名 删除文件,rm -a 目录名删除目录及子目录
mkdir 目录名 建立目录
rmdir 删除子目录,目录内没有文档。
chmod 设定档案或目录的存取权限
grep 在档案中查找字符串
diff 档案文件比较
find 档案搜寻
date 现在的日期、时间
who 查询目前和你使用同一台机器的人以及Login时间地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名称
groups 查看某人的Group
passwd 更改密码
history 查看自己下过的命令
ps 显示进程状态
kill 停止某进程
gcc 黑客通常用它来编译C语言写的文件
su 权限转换为指定使用者
telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。
ftp ftp连接上某服务器(同win2K)
计算机运行命令全集
winver---------检查Windows版本
wmimgmt.msc----打开windows管理体系结构
wupdmgr--------windows更新程序
winver---------检查Windows版本
wmimgmt.msc----打开windows管理体系结构
wupdmgr--------windows更新程序
wscript--------windows脚本宿主设置
write----------写字板winmsd-----系统信息
wiaacmgr-------扫描仪和照相机向导
winchat--------XP自带局域网聊天
mem.exe--------显示内存使用情况
Msconfig.exe---系统配置实用程序
mplayer2-------简易widnows media player
mspaint--------画图板
mstsc----------远程桌面连接
mplayer2-------媒体播放机
magnify--------放大镜实用程序
mmc------------打开控制台
mobsync--------同步命令
dxdiag---------检查DirectX信息
drwtsn32------ 系统医生
devmgmt.msc--- 设备管理器
dfrg.msc-------磁盘碎片整理程序
diskmgmt.msc---磁盘管理实用程序
dcomcnfg-------打开系统组件服务
ddeshare-------打开DDE共享设置
dvdplay--------DVD播放器
net stop messenger-----停止信使服务
net start messenger----开始信使服务
notepad--------打开记事本
nslookup-------网络管理的工具向导
ntbackup-------系统备份和还原
narrator-------屏幕"讲述人"
ntmsmgr.msc----移动存储管理器
ntmsoprq.msc---移动存储管理员操作请求
netstat -an----(TC)命令检查接口
syncapp--------创建一个公文包
sysedit--------系统配置编辑器
sigverif-------文件签名验证程序
sndrec32-------录音机
shrpubw--------创建共享文件夹
secpol.msc-----本地安全策略
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---本地服务设置
Sndvol32-------音量控制程序
sfc.exe--------系统文件检查器
sfc /scannow---windows文件保护
tsshutdn-------60秒倒计时关机命令
tourstart------xp简介(安装完成后出现的漫游xp程序)
taskmgr--------任务管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打开资源管理器
packager-------对象包装程序
perfmon.msc----计算机性能监测程序
progman--------程序管理器
regedit.exe----注册表
rsop.msc-------组策略结果集
regedt32-------注册表编辑器
rononce -p ----15秒关机
regsvr32 /u *.dll----停止dll文件运行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盘检查
certmgr.msc----证书管理实用程序
calc-----------启动计算器
charmap--------启动字符映射表
cliconfg-------SQL SERVER 客户端网络实用程序
Clipbrd--------剪贴板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管理
cleanmgr-------**整理
ciadv.msc------索引服务程序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----检查XP是否激活
lusrmgr.msc----本机用户和组
logoff---------注销命令
iexpress-------木马捆绑工具,系统自带
Nslookup-------IP地址侦测器
fsmgmt.msc-----共享文件夹管理器
utilman--------辅助工具管理器
gpedit.msc-----组策略
04、总结mac终端命令
MacOS 常用终端命令大全
1、目录操作
标准 命令——功能描述——示例
mkdir——创建一个目录——mkdir dirname
rmdir——删除一个目录——rmdir dirname
mvdir——移动或重命名一个目录——mvdir dir1 dir2
cd——改变当前目录——cd dirname
pwd——显示当前目录的路径名——pwd
ls——显示当前目录的内容——ls -la
dircmp——比较两个目录的内容——dircmp dir1 dir2
du——查看目录大小——do -sh
2 、文件操作
命令——功能描述——示例
cat——显示或连接文件————cat filename
pg——分页格式化显示文件内容——pg filename
more——分屏显示文件内容——more filename
od——显示非文本文件的内容——od -c filename
cp——复制文件或目录——cp file1 file2
rm——删除文件或目录——rm filename
mv——改变文件名或所在目录——mv file1 file2
ln——联接文件——ln -s file1 file2
find——使用匹配表达式查找文件——find . -name “*.c” -print
file——显示文件类型——file filename
open——使用默认的程序打开文件——open filename(open . 打开当前目录)
du——查看文件大小——do -sh filename
3、选择操作
命令——功能描述——示例
head——显示文件的最初几行——head -20 filename
tail——显示文件的最后几行——tail -15 filename
cut——显示文件每行中的某些域——cut -f1,7 -d: /etc/passwd
colrm——从标准输入中删除若干列——colrm 8 20 file2
paste——横向连接文件——paste file1 file2
diff——比较并显示两个文件的差异——diff file1 file2
sed————非交互方式流编辑器——sed “s/red/green/g” filename
grep——在文件中按模式查找——grep “^[a-zA-Z]” filename
awk——在文件中查找并处理模式——awk ‘{print 111}’ filename
sort——排序或归并文件——sort -d -f -u file1
uniq——去掉文件中的重复行——uniq file1 file2
comm——显示两有序文件的公共和非公共行——comm file1 file2
wc——统计文件的字符数、词数和行数——wc filename
nl——给文件加上行号——nl file1 >file2
4、安全操作
命令——功能描述——示例
passwd——修改用户密码——passwd
chmod——改变文件或目录的权限——chmod ug+x filename
umask————定义创建文件的权限掩码——umask 027
chown——改变文件或目录的属主——chown newowner filename
chgrp——改变文件或目录的所属组——chgrp staff filename
xlock——给终端上锁——xlock -remote
5、编程操作
命令——功能描述——示例
命令——功能描述——示例
make——维护可执行程序的最新版本——make
touch——更新文件的访问和修改时间——touch -m 05202400 filename
dbx——命令行界面调试工具——dbx a.out
xde——图形用户界面调试工具——xde a.out
6、进程操作
命令——功能描述——示例
命令——功能描述——示例
ps——显示进程当前状态——ps u
kill——终止进程——kill -9 30142
nice——改变待执行命令的优先级——nice cc -c *.c
renice——改变已运行进程的优先级——renice +20 32768
7、时间操作
命令——功能描述——示例
date——显示系统的当前日期和时间——date
cal——显示日历——cal 8 1996
time——统计程序的执行时间——time a.out
8、网络与通信操作
命令——功能描述——示例
telnet——远程登录——telnet hpc.sp.net.edu.cn
rlogin——远程登录——rlogin hostname -l username
rsh——在远程主机执行指定命令——rsh f01n03 date
ftp——在本地主机与远程主机之间传输文件——ftp ftp.sp.net.edu.cn
rcp——在本地主机与远程主机 之间复制文件——rcp file1 host1:file2
ping——给一个网络主机发送 回应请求——ping hpc.sp.net.edu.cn
mail——阅读和发送电子邮件——mail
write——给另一用户发送报文——write username pts/1
mesg——允许或拒绝接收报文——mesg n
9、Korn Shell 命令
命令——功能描述——示例
history——列出最近执行过的 几条命令及编号——history
r——重复执行最近执行过的 某条命令——r -2
alias——给某个命令定义别名——alias del=rm -i
unalias——取消对某个别名的定义——unalias del
10、其它命令
命令——功能描述——示例
uname——显示操作系统的有关信息——uname -a
clear——清除屏幕或窗口内容——clear
env——显示当前所有设置过的环境变量——env
who——列出当前登录的所有用户——who
whoami——显示当前正进行操作的用户名——whoami
tty——显示终端或伪终端的名称——tty
stty——显示或重置控制键定义——stty -a
du——查询磁盘使用情况——du -k subdir
df——显示文件系统的总空间和可用空间——df /tmp
w——显示当前系统活动的总信息——w
05、JDK
卸载JDK
- 删除Java的安装目录
- 删除Java_HOM
- 删除path下关于java的目录
- java_version
安装JDK
- 百度搜索JDK8
- 同意协议
- 下载电脑对应的版本
- 双击安装JDK
- 记住安装的路径
- 配置环境变量
1.我的电脑– – >右键– –>属性
2.环境变量– – >JAVA_HOME
3.配置path变量
7.测试JDK是否安装成功
1.打开cmd
2.java -version
notepad++、sublime、vscode等推荐记事本!
06、第一个程序
HelloWord
public class HelloWord{
public static void main(String[] args){
System.out.println("Hello Word!");
}
}
注意点:
- 每个单词的大小写不能出现问题,Java是大小写很敏感的
- 尽量使用英文;
- 文件名和类名必须一致,并且首字母大写
- 符号使用的是中文错误
07、数据类型拓展:
//整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x
public class HelloWord{
public static void main(String[] args){
int i = 10;
int i1 = 010;八进制0
int i2 = 0x10;十六进制0x 0~9 A~F 16
System.out.println(i);//10
System.out.println(i1));//8
System.out.println(i2);//16
}
}
//浮点数拓展 银行管理 : BigDecimal
//float 有线 离散 舍入误差 大约 接近但不等于
//double
//最好完全使用浮点数进行比较 ***
float f = 0.1f;//0.1
double d = 1.0/10;//0.1
System.out.println(f==d);//false
float d1 = 321312312;
float d2 = d1+1;
System.out.println(f==d);//true
//字符拓展
char a = 'a';
char b = '中';
System.out.println(a);//a
System.out.println((int)a);//强制转换 97
System.out.println(b);//中
System.out.println((int)b);//强制转换 20013
//所有的字符本质还是数字
//编码 Unicode 2字节 0 - 65536 Excel 2^16 = 65536
//U0000 UFFFF
char c = '\u0061';
System.out.println(c);//a
//转义字符
// \t 制表符
// \n 换行
System.out.println("Hello\tWord");
String sa = new String("hello word");
String sb = new String("hello word");
System.out.println(sa==sb);
String sc = "hello word";
String sd = "hello word";
System.out.println(sc==sd);
//对象 从内存分析
//布尔值扩展
boolean flag = true;
if (flag==true){} //新手
if (flag){} //老手
//Less is More 代码要精简易读
08、类型转换
public class Demo {
public static void main(String[] args) {
int i =128;
byte b = (byte) i;//内存溢出
//强制转换 (类型)变量名 高->低
System.out.println(i);
System.out.println(b);
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型变为不相干的类型
3.在把高容量转换为低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
//操作数比较大的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;// -1474836480, 计算的时候溢出了
int total1 = money*years;//默认是int,转换之前已经存在问题了
int total2 = (int) (money*((long)years));//先把一个数转换为Long
System.out.println(total2);
}
}
09、变量
public class Demo {
//类变量 static
static double salary = 2500;
//属性 :变量
//实例变量:从属于对象;如果不自进行初始化,这个类型的默认值 0 0.0
//布尔值:false
//除了数据类型,其他的默认值都是null
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量 :必须声明和初始化值
int i = 10;
System.out.println(i);
//变量类型 变量名字 = new Demo();
Demo demo = new Demo();
System.out.println(demo.age);
System.out.println(demo.name);
//类变量 static
System.out.println(salary);
}
//其他方法
public void add(){
}
}
10、常量:final
public class Demo {
//修饰符,不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
Java变量命名规则为:
1、Java变量命名只能使用字母、数字、下划线、美元符号($)组成。
2、变量名以字母、下划线或者美元符号开头,其中以美元符号开头命名的变量虽然能够编译通过但是不建议使用。
3、变量的名字可大小写混用,但首字符应小写。
4、Java变量名不限制长度,在命名的时候,尽量使用完整的单词进行命名,不要使用缩写。
5、变量名不可以和java关键字冲突,但是可以包含关键字。
11、运算符 优先级:()
:long以下的都会为int,long以上的都为最高那个
一元运算符
public class Demo {
public static void main(String[] args) {
//++ -- 自增,自减 一元运算符
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,在自增
//a = a+1;
System.out.println(a);
//a = a+1;
int c = ++a;//执行完这行代码后,先自增,再给b赋值
//幂运算 2^3 2*2*2 =8 很多运算,我们会使用一些工具类来操作!
double pow = Math.pow(3, 2);
System.out.println(pow);
}
}
位运算符
public class Demo {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
2 * 8 = 16 2*2*2*2
效率极高!!!
<< *2
>> /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
}
}
赋值运算符
public class Demo {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;//a=a+b
a-=b;//a=a-b
System.out.println(a);
//字符串连接符 + ,String
System.out.println(""+a+b);//1020
System.out.println(a+b+"");//30
}
}
条件运算符
public class Demo {
public static void main(String[] args) {
//x ? y : z
//如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ?"不及格":"及格";
System.out.println(type);
}
}
12、包机制
包机制:一般利用公司域名倒置作为包名;
13、JavaDoc
命令:javadoc -encoding UTF-8 -charset UTF-8 Doc.java
可以直接写成:javadoc Doc.java
14、Scanner:用户交互
next( ):
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
实例:
public class Demo {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if (scanner.hasNext()){
String next = scanner.next();//程序会等待用户输入完毕
System.out.println("输入的内容为:"+next);//hello
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关
scanner.close();
}
}
public class Demo {
public static void main(String[] args) {
//接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断是否还有输入
if (scanner.hasNextLine()){
String next = scanner.nextLine();//程序会等待用户输入完毕
System.out.println("输入的内容为:"+next);//hello word
}
scanner.close();
}
}
15、Scanner进阶:
public class Demo {
public static void main(String[] args) {
//我们可以输入多个数字,并求其和与平均值,每输入一个数字就回车确认,通过输入非数字 来结束输入并输出结果
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
//通过循环判断是否还有输入,并在里面每一次进行求和统计
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
m++;
sum += x;
System.out.println("你输入了第"+m+"个数据,然后当前的结果sum="+sum);
}
System.out.println(m+"个数的和为"+sum);
System.out.println(m+"个数的平均值是"+(sum/m));
scanner.close();
}
}
16、循环
if
public class Demo {
public static void main(String[] args) {
if(表达式){
A:如果表达式的值是真的,就会执行语句A,否则不执行
}
}
}
switch
switch循环
使用方法:一般用来做分支的,或者进行选择
public class Demo {
public static void main(String[] args) {
String name = "秦疆";
switch (name){
case "秦疆":
System.out.println("秦疆");
break;
case "狂神":
System.out.println("狂神");
break;
}
}
}
while
while循环
使用方法:先判断,在执行;当条件表达式成立时,则执行循环体,然后在进行判断,如果条件不成立时,有可能不执行。一般用于循环次数不确定的循环
int i=0;
int sum=0;
while (i<100){
if (i%3==0) {
sum+=i;
}
i++;
}
System.out.println("100以内的能被3整除之数的和为"+sum);
do-while
do..while循环
使用方法:先执行,后判断;一般用于循环次数不确定的循环,与while循环不同的是先执行后判断,至少会执行一次。
int j=1;
int sum2=0;
do {
if (j%5==0&&(j%7==0))
sum2 +=j;
j++;
} while (j<=100);
System.out.println("100以内即能被5整除又能被7整除数的和"+sum2);
for
for循环(已知循环多少次)
使用方法:先判断,在执行;如果循环次数确定,那么一般用for循环
for循环是最有效,最灵活的循环结构
int sum=0;
for (int i = 0; i < 100; i++) {
sum +=i+1;
}
System.out.println("100以内的和为:"+sum);
break
:用于强制退出循环
continue
:用于终止某次循环过程
goto关键字
public class Demo {
public static void main(String[] args) {
//打印101-105之间所有的质数
//质数是指在大于1的自然数中,除了1和他本身不会再有其他因数的自然数
//不建议使用!了解即可的一个玩法
int count = 0;
outer:for (int i = 101; i < 150; i++) {
for (int j = 2; j < i/2; j++) {
if (i % j==0){
continue outer;
}
}
System.out.println(i+"");
}
}
}
17、方法
重载(overloading): 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
方法重载的规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错
重写:是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
可变参数
- JDK1.5开始,Java支持传递同类型的可变参数给一个方法
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通的参数必须在他之前声明
实例:
public class Demo {
public static void main(String[] args) {
printMax(12,43,65,232,22);
printMax(new double[]{1,2,3,4,5});
}
public static void printMax(double... numbers){
if (numbers.length==0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
//排序
for (int i = 1; i < numbers.length; i++) {
if (numbers[i]>result){
result = numbers[i];
}
}
System.out.println("The Max value is"+result);
}
}
递归
:简单来说就是自己调用自己
递归结构包括两部分:
递归头:什么时候不调用自生方法。如果没有头,将陷入死循环。
递归体:什么时候需要调用自身方法。
实例:看代码
//递归
public class Demo {
//递归思想
//阶乘
//5! 5*4*3*2*1
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n){
if (n==1){
return 1;
}else {
return n *f(n-1);
}
}
}
数组(Array):
public class Demo {
//变量的类型 变量的名字 = 变量的值
//数组类型
public static void main(String[] args) {
int[] nums ;//1.声明一个数组
nums = new int[3];//创建一个数组
//3.给数组元素中赋值 数组下标从0开始
nums[0]=1;
nums[1]=2;
nums[2]=3;
int sum = 0;//计算所有元素的和
//获得数组长度: array.length
for (int i = 0; i < nums.length; i++) {
sum = sum +nums[i];
}
System.out.println("总和为:"+sum);
}
}
数组初始化:
public class Demo {
public static void main(String[] args) {
//静态初始化 :创建 + 赋值
int[] a = {1,2,3,4};
System.out.println(a[1]);
//动态初始化
int[] b = new int[10];
b[2] = 10;
System.out.println(b[2]);
System.out.println(b[3]);// 0 默认值
//System.out.println(b[10]); // ArrayIndexOutOfBoundsException : 数组下标越界异常
}
}
数组的四个基本特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是想同类型,不允许出现混合类型。
- 数组中的元素可以使任何数据类型,包括基本类型和引用类型。
- 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的
数组总结:
- 数组是相同数据类型(数据类型可以为任意类型)的有序集合
- 数组也是对象。数组元素相当于对象的成员变量
- 数组长度是确定的。不可变的。如果越界,则报:ArrayIndexOutOfBoundsException
进阶方法:
public class Demo {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
// //JDK1.5,没有下标
// for (int array : arrays) {
// System.out.println(array);
// }
int[] reverse = reverse(arrays);
printArray(reverse);
}
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
//反转的操作
for (int i = 0,j= result.length-1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
}
}
二维数组:
public class Demo {
public static void main(String[] args) {
//[4][2]
/*
1,2 array[0]
2,3 array[1]
3,4 array[2]
4,5 array[3]
*/
int[][] array = {{1,2},{2,3},{3,4},{4,5}};
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j]);
}
}
printArray(array[0]);
}
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
}
}
Arrays类:
public class Demo {
public static void main(String[] args) {
int[] a = {1, 4, 3, 6, 7};
//打印数组元素 Arrays.toString()
System.out.println(Arrays.toString(a));
Arrays.sort(a);//对数组进行排序
System.out.println(Arrays.toString(a));
//填充 formIndex: 起始下标 toIndex: 结束下标
Arrays.fill(a,2,4,0);
System.out.println(Arrays.toString(a));
}
//打印数组元素
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
冒泡排序
时间复杂度:O(n2)
思路:
这里可以理解为如果有两杯子水一杯水是红色(A)的一杯水是蓝色(B)的,我们要交换这两杯水,这个时候我们就需要一个容器temp,我们要把A先导入容器中然后把B导入A,接着把容器中的水导入B。
public class Demo {
//1.比较数组中,两个相邻的元素,如果选出一个数比第二个数大,就交换他们的位置
//2.每一次比较,都会产生出一个最大,或者最小的数字;
//3.下一轮则可以少一次排序
//4.依次循环直到结束!
public static void main(String[] args) {
int[] a = {1,54,76,34,98,332};
int[] sort = sort(a);//调用完我们自己写的排序方法以后,返回一个排序后的数组
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
//临时变量
int temp = 0;
//外层循环,判断要循环多少次
for (int i = 0; i < array.length-1; i++) {
//内层循环,判断两个数,如果第一个数比第二个数大,则交换位置
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j+1]>array[j]){//更改这里可以从小到到大<
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}
冒泡排序的优化:
为什么要优化?
如果内部排序已经是好的了,可以节约时间成本
public static int[] sort(int[] array){
//临时变量
int temp = 0;
//外层循环,判断要循环多少次
for (int i = 0; i < array.length-1; i++) {
boolean flag = false;//通过flag标志位减少没有意义的比较
//内层循环,判断两个数,如果第一个数比第二个数大,则交换位置
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j+1]>array[j]){//更改这里可以从小到到大<
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;//里面每循环一次flag为true
}
}
if (flag==false){//说明里面已将是排序好的所以跳出循环
break;
}
}
return array;
}
}
稀疏数组
当一个数组中大部分元素为0,或者同一值的数组时,可以使用稀疏数组来保存该数组
稀疏数组的处理方式是:
- 记录该数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模
public class Demo {
public static void main(String[] args) {
//模拟五子棋
//1.创建一个二维数组 11 * 11 0:没有棋子 1:黑棋 2:白棋
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
//输出原始的数组
System.out.println("输出原始的数组");
for (int[] ints : array) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//转换为稀疏数组
//获取有效值的个数
int sum = 0 ;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数"+sum);
int[][] array1 = new int[sum+1][3];//这里的sum+1代表行,有效值的个数加一 3代表列
array1[0][0] = 11;//存了多少行
array1[0][1] = 11;//存了多少列
array1[0][2] = sum;//几个有效的值
//遍历二维数组,将非零的值,存放在稀疏数组中
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j]!=0){
count++;
array1[count][0] =i;//第几行的第0个数字存他的横坐标
array1[count][1] =j;//第几行的第1个数字存他的纵坐标
array1[count][2] =array[i][j];//值
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i][0]+ "\t"
+array1[i][1]+ "\t"
+array1[i][2]+ "\t");
}
System.out.println("==============");
System.out.println("还原" );
//1,读取稀疏数组
int[][] array2 = new int[array1[0][0]][array1[0][1]];
//2.给其中的元素还原它的值
for (int i = 1; i < array1.length; i++) {
array2[array1[i][0]][array1[i][1]] = array1[i][2];
}
//3.打印
System.out.println("输出还原的数组");
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
面向对象
- 面向对象编程(Object-Oriented Programming,OOP)
- 面向对象编程的本质是:以类的方式组织 代码,以对象的组织(封装)数据
- 抽象
三大特性:
- 封装
- 继承
- 多态
关于static他是和类一起加载的而之后的方法是类实例化之后才存在的
看代码
public class A{
public static void main(String[] args){
}
public static void a(){}//和类一起加载的
public void b(){}//类实例化之后才存在的
}
实际参数和形式参数的类型要一一对应
值传递
//值传递
public class Demo {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
Demo.change(a);
System.out.println(a);
}
public static void change(int a){
a = 10;
}
}
引用传递
//引用传递:对象,本质还是值传递
public class Demo {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//null
Demo.change(person);
System.out.println(person.name);
}
public static void change(Person person){
//person是一个对象:指向了--->Person person = new Person();这是一个具体的人,可以改变属性!
person.name = "秦疆";
}
}
class Person{
String name;
}
一个项目只存在一个main方法
super注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中!
- super 和 this 不能同时调用构造方法!
Vs this:
代表的对象不同:
- this:本身调用这个对象
super:代表父类对象的应用
- 前提
- this:没有继承也可以使用
super:只能在继承条件下才可以使用
- 构造方法
- this():本身的构造
- super():父类的构造!
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小 :public>Protected>Default>private
- 抛出的异常:范围,可以被缩小,但不能扩大
重写,子类的方法和父类必要一致:方法体相同!
为什么需要重写:
1.父类的功能子类不一定需要,或者不一定满足!
多态注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 类型转换异常! ClassCastExpection!
- 存在条件:继承条件,方法需要重写,父类引用指向子类引用!
- static 方法,属于类,他不属于实例
- final常量
- private方法
类型转换
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型
- 把父类转换为子类,向下转型,强制转换
- 方便方法的调用,减少重复的代码!简洁
抽象: 封装、继承、多态
instanceof:检测某个对象是不是另一个对象的实例
static
public class Demo {
{ // 2 赋初始值
System.out.println("匿名代码块");
}
static { // 1 只执行一次~
System.out.println("静态代码块");
}
public Demo() { // 3
System.out.println("构造方法");
}
public static void main(String[] args) {
Demo demo = new Demo();
System.out.println("=====");
Demo demo1 = new Demo();
}
}
还可以静态导入包在import后面加static关键字
抽象类
//abstract 抽象类:类 extends:单继承~ (接口可以多继承)
public abstract class Demo {
//约束~有人帮我们实现~
//abstract,抽象方法,只有方法名字,没有方法的实现!
public abstract void something();
//1.不能new这个抽象类,只能靠子类去实现他,约束!
//2.抽象类可以写普通的方法~
//3.抽象方法只能在抽象类中~
//抽象的抽象:约束~
}
//抽象类的所有方法,继承了他的子类,都必须要实现他的方法~除非子类也是抽象类
public class A extends Demo {
@Override
public void something() {
}
}
接口
- interface定义 使用implements实现
- 接口可以实现多继承
- 接口中的所有定义的方法其实都是抽象的 默认都是: public abstract
- 常量的定义 默认都是:public static final
- 接口不能被实例化~接口中没有构造方法
- 必须重写接口中的方法
- 约束
类Class
一个java类中可以有多个class类,但只能有一个public class
异常
- Throwable:这个是最大的异常
- Throwable分为Exception与Error
- Exception:这是我们的问题可以解决
- Error:这是JVM或者底层的一些问题我们不需要管
- 要捕获多个异常需要从小到大
- throw可以主动抛出一个异常
- 在方法上抛出一个异常就是throws
异常处理
//自定义的异常类
public class MyExpection extends Exception{
//传递数字>10
private int detail;
public MyExpection(int a) {
this.detail = a;
}
//tostring:异常信息的打印
@Override
public String toString() {
return "MyExpection{" +
"detail=" + detail +
'}';
}
}
public class Test {
//可能存在异常的方法
static void test(int a) throws MyExpection {
System.out.println("传递的参数为:"+a);
if (a>10){
throw new MyExpection(a);//抛出
}
System.out.println("ok");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyExpection e) {
System.out.println("MyExpection=>"+e);
}
}
}