控制台程序开发
1.编辑源代码
编辑源代码,就是我们在任何一个工具上编写源代码,可以是记事本,最后命名为.java文件,<br>这部分的操作相当于在eclipse上新建类写代码。
2.编译生成字节码文件
生成.class字节码文件,在命令行输入命令java c将该源码文件编译生成.class字节码文件,<br>这部分的操作相当于在eclipse上写完Ctrl+S保存。
3.加载字节码文件
在命令行中输入java这个命令,就启动了一个java虚拟机,然后加载(.class)字节码文件到内存,然后运行内存中的字节码指令了, 这部分的操作相当于在eclipse上点击运行按钮。
4.main()方法中执行字节码
执行引擎找到main()这个入口方法,执行其中的字节码指令。
常用DOS指令
exit -- 退出当前dos命令窗口
cls -- 清屏
dir -- 可以看到当前目录下的所有的子文件
cd -- 表示change directory 改变目录(cd+目录的路径)
cd.. -- 回到上级目录
cd\ -- 直接回到根目录
c: -- 切换盘符
程序开发环境
JDK(Java Development Kit)
JAVA语言的软件工具开发包,是整个JAVA开发的核心,他包含了JAVA的运行(JVM+JAVA类库)环境和JAVA工具。
JRE(Java Runtime Environment)
开发完成JAVA程序所需要的环境<br>
1.JVM:JAVA虚拟机
2.运行时所需要的类库
常用JDk工具(命令行)<font color="#b71c1c">https://blog.csdn.net/qq_29860591/article/details/112301572?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3</font>
jps(JVM Process Status Tool)
显示指定系统内所有的虚拟机进程
jstat(JVM Statistics Monitoring Tool)
用于收集虚拟机各方面的运行数据
jinfo(Configuration Info forJava)
显示虚拟机配置信息
jmap(Memory Map for Java)
生成虚拟机的内存转储快照(heapdump文件)
jhat(JVM Heap Dump Browser)
用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstack(Stack Trace forJava)
显示虚拟机的线程快照
JDK目录结构
bin目录
存放编译、执行Java程序的命令或其他相关命令
include目录
存放C\C++的头文件,Java调用C\C++程序使用JNI(Java Native Interface)技术
jre目录
Java运行环境目录,JRE(Java Runtime Environment)
lib目录
存放的是Java的库文件,后缀为.jar(Java Archive) Java文档(.war Web Archive)
控制台I/O
1.导包
import java.until.Scanner;
2.实例化
Scanner scan = new Scanner(System.in);
3.调用并赋值
int score = scan.nextInt();
流程图
流程
流程是一项活动或一系列连续有规律的事项或行为进行的程序。
流程图
流程图(Flow Chart),顾名思义,就是用来直观地描述一个工作过程的具体步骤图,它使用图形表示流程思路,是一种极好的方法。它在一些技术设计、工作步骤及商业简报等领域应用较为广泛,也可以称之为输入-输出图。它通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序,用图形表示执行步骤,十分直观形象,易于理解。<br>
流程图的作用
流程图作为一个工具,帮助我们把一个复杂的过程简单而直观地展示出来,大大提高了我们的效率。其次,在我们画出一张流程图之后,方便我们将实际操作的步骤和我们想象的过程进行比较、对照,更加方便我们寻求改进的机会。最后,流程图还能帮助我们将工作过程中复杂的、有问题的、重复的部分、多余的环节以及可以简化和标准化的地方都显示出来,有利于我们把复杂流程简单化。<br>
流程图的优势
一张简明的流程图,能帮你梳理活动流程的先后顺序,让策划、思考的思路更清晰、逻辑更顺畅,有助于流程的逻辑实现和有效解决实际问题。
流图还能帮助我们查漏补缺,避免活动流程、逻辑上出现遗漏,确保活动流程的完整性。通过梳理、琢磨流程上的步骤和关键节点,可以快速发现遗漏之处,以便及时整改,保证后续方案执行的顺畅。
流程图还是职场沟通的神兵利器,能够提升我们与老板、同事之间的沟通效率,可以省下不少扯皮的时间。当一件事情的执行步骤比较复杂,判定条件较多,用口头难以表达清楚,用一张流程图,就能高效地解决沟通问题。
流程图的符号要求
圆角矩形或者扁圆都可以表示程序的开始或者结束,在程序流程图中用作为起始框或者结束框。
<font color="#d32f2f">https://blog.csdn.net/muzihuaner/article/details/105284333?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165164871916781667828345%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165164871916781667828345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-105284333.142^v9^control,157^v4^control&utm_term=%E6%B5%81%E7%A8%8B%E5%9B%BE&spm=1018.2226.3001.4187</font>
流程图的三大结构
顺序结构
在顺序结构中,各个步骤是按先后顺序执行的,这是一种最简单的基本结构。即完成上一个框中指定的操作才能再执行下一个动作。
选择结构
选择结构又称分支结构,选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。在实际运用中,某一判定结果可以为空操作。
循环结构
循环结构又称为重复结构,就是流程在一定的条件下,反复执行某一操作的流程结构。
绘制流程图中的注意事项
绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列。
绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列。一个流程从开始符开始,以结束符结束。开始符号只能出现一次,而结束符号可出现多次。若流程足够清晰,可省略开始、结束符号。
菱形为判断符号,必须要有“是和否(或Y和N)”两种处理结果,意思是说,菱形判断框一定需要有两条箭头流出;且判断符号的上下端流入流出一般用“是(或Y)”,左右端流入流出用“否(或Y)”。
同一流程图内,符号大小需要保持一致,同时连接线不能交叉,连接线不能无故弯曲。
流程处理关系为并行关系的,需要将流程放在同一高度。
必要时应采用标注,以此来清晰地说明流程,标注要用专门的标注符号。
处理流程须以单一入口和单一出口绘制,同一路径的指示箭头应只有一个。
同一路径的指示箭头应只有一个。
流程图中,如果有参考其他已经定义的流程,不需重复绘制,直接用已定义流程符号即可。
程序调试
debug。断点调试。
Debug窗口
主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码)
断点Breakpoints窗口
断点列表窗口,可以方便增加断点,设置断点条件,删除断点等
变量Variables窗口
显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值
代码编辑窗口
输出Console窗口
日志等输出内容,调试时,可以将关注的组件级别设置低一点,以便获得跟多输出信息
表达式expression窗口
写上自己需要观察的数据的表达式,或者修改变量值
Display窗口
可以在display中执行代码块,输出内容等
类型层级Type hierarchy窗口
查看当前所在类的继承层次,包括实现接口,类继承层次
方法调用关系Call hierarchy窗口
查看当前方法被哪些方法调用,调用方法在哪些类中、第几行,可以直接打开对应的方法
搜索结果Search窗口
结合快捷键可以查看变量、方法等在工作空间、项目、工作集中被引用或定义的代码位置<br>
debug
Step Return
跳出当前方法,在被调用方法的执行过程中,使用Step Return会在执行完当前方法的全部代码后跳出该方法返回到调用该方法的方法中。
Step Over
在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步。
Step Into
单步执行,遇到子函数就进入并且继续单步执行。
Resume
恢复暂停的线程,直接从当前位置跳到下一个断点位置。
Suspend
暂停选定的线程,这个时候可以进行浏览或者修改代码,检查数据等。
Terminate
Eclipse通过Terminate命令终止对本地程序的调试。<br>
Disconnect
Eclipse使用Disconnect命令来终止与远程JVM的socket连接。
Run to Line
执行到当前行(将忽略中间所有断点,执行到当前光标所在行)。
Drop To Frame
回退到指定方法开始处执行。
Copy Stack
拷贝当前线程栈信息。
输出消息。system.out.println();来调试。
动态代理(Dynamic Proxy)。动态代理是一个特定的Java特性,它允许开发者引入proxy类,加进某一给定类之前,并通过某一给定接口截获所有调用。你可以在很短时间内用一个普通代理设置一个虚拟事件处理器,来查看事件发生顺序。当需要理解事件处理器时这是最简单和快捷的方法。
运行时剖析器(Run-time Profiler)。剖析器是通过特定的JVM hooks在系统中跟踪所有调用的强大工具。但是用它来跟踪执行过程是大才小用。
Aspects。面向方面编程。它是截获你的代码执行既快速又容易的方法。你可以围绕方法、构造器、属性访问等等有选择地设置hook,而不需要修改原始代码。在这些hook中,你可以打印调试消息。<br>
变量与运算符
变量和常量
变量
变量指的是在程序运行的过程中存储可以变化的数据。
运算符
算数
单目:~(按位取反)、!(取非)、-(负号运算符)、++(自增)、--(自减)
double/0不会报错,结果infinity无穷大
三目: a>b?true:false
关系
等于符号:== 、不等于符号:!=、大于符号:>
位与逻辑
与(&)、非(~)、或(|)、异或(^)
逻辑
与(&&)、或(||)、 非(!)
赋值
= 、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
instanceof
该运算符是双目运算符,左边的操作元素是一个对象,右面是一个类或接口。当左面的对象是 右面的类(或右面类的子孙类)创建的对象、或者是右边接口的实现类(或实现类的子孙类)的对象时,该运算符运算结果是true,否则是false。
位移
<<:带符号左移、>>:带符号右移、>>>:无符号右移
运算符优先级
按优先级从高到低排序如下:[] () ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != & ^ && || ? :=
数据类型与数组
数据类型
整型(Java中整数默认为int类型)
int(32位)
long(64位)
Java中整数默认为int类型,声明要在后面加L,如long num = 21000000000000L(或者小写的l)
浮点类型(Java中浮点数默认为double类型)
float(32位)
因为默认是double,float num = 55.55f; 6-7位有效数字
类型转换
自动类型转换
byte -> short -> int -> long ->float -> double -> char -> (ASSIC码)
强制类型转换
数组
数组名在栈中开辟空间存,数组值在堆中开辟空间来存储
一维数组、二维数组、多维数组
数组类型[] 数组名 = new 数据类型[数组大小]
数组类型[] 数组名 new 数组类型[m][n]
初始化方法
静态初始化
数组类型[][] 数组名 = {{元素1,元素2,...},{元素1,元素2,...},{元素1,元素2,...}.....};
数组扩容
a = Arrays.copy(a,a.length+b.length); b=null;
数组缩容
a = Arrays.copy(a,a.length-b.length); b=null;
Arrays工具类
sort:排序
toString:将数组变成字符串
copyOf:数组拷贝
equals:比较数组元素是否相同
常见算法
排序算法(优先选择稳定性)
冒泡(O(n^2),稳定)
选择(O(n^2),不稳定)
快速(O(nlogn),不稳定)
归并(O(nlogn),稳定)
插入排序(O(n^2)大部分已排序时较好)
其他(不使用第三变量交换)
(可操作字符): a=a^b; b=a^b; a=a^b;
(可操作字符): a=a+b;b=a-b;a=a-b;
(不可操作字符): a=a*b; b=a/b; a=a/b;
swap(a,b);