Java
第零章
day1 [2020/2/3]
认识计算机
- Computer:电子计算机,电脑
- 能够按照程序运行,自动,高速处理海量数据的现代化电子设备
- 由硬件和软件组成
- 有台式机,笔记本和大型计算机
- 应用领域:科学计算,数据处理,自动控制,计算机辅助设计,人工智能,网络等
计算机的硬件
-
CPU:中央处理器,又称中央处理单元,简称处理器,是整个计算机系统中最重要的部件之一,控制整个电脑主要的算术逻辑单元(arithmetic logic unit,简称ALU),使得计算机程序和操作系统可在它上面运行,其性能直接影响计算机系统的工作效率。
-
主板:计算机主要的电路板(PCB)。计算机的其他硬件一般直接插入主板中来交换信息。
-
内存:这里指随机存储器(即RAM),属于电脑存储器的一种,是计算机的“短期临时存储器”,用于存放当前正在运行的程序以及目前所需的数据等。它的读写速度远高于硬盘驱动器或光盘驱动器之类的外部存储设备,但当系统关闭或无电源供应的时候,其中的资料会丢失。
-
电源:电源供应器,外设之一。主要作用是将家用的交流电转换为个人电脑所需的直流电。
-
机箱:计算机的许多硬件,如主板、硬盘和电源等,都安放与固定在机箱当中。
-
硬盘:分为机械硬盘(Hard Disk Drive,HDD)和固态硬盘(Solid State Disk、Solid State Drive, SSD)
-
- 机械硬盘(Hard Disk Drive, HDD)的运作基本原理是经由马达带动内部的盘片(表面涂有磁性物质)高速旋转,再利用读取头写入与读取资料(电磁铁原理)。
- 固态硬盘(Solid State Disk、Solid State Drive,简称SSD),是一种基于闪存技术的存储媒体。不像传统硬盘是以磁性媒体做为存储的媒体,因此也无需碟片与马达相关零件,因此不会有马达旋转时所造成的噪音。优点是高速访问、低功耗、抗震动
-
显卡:是电脑显示图像的重要器件,它负责处理CPU发送来的图像指令和数据,并将处理后的结果输出至显示器,以最终形成图像。
-
键盘、鼠标:是电脑的主要输入设备之一。
-
显示器:是电脑的图像显示设备之一。
-
等……
计算机软件
-
操作系统:操作系统用于管理与控制计算机资源,并可让用户通过各种程序使用这些资源。它是计算机运行的平台以及应用软件的基础。常见的操作系统有windows,Linux,Mac,Android, IOS……
-
应用软件:应用软件是为执行各种特定的任务或解决特定的问题而开发的程序。应用程序依赖于操作系统等系统软件的支持,需要系统软件为其提供内存管理、网络连接以及设备驱动等常规服务。
DOS命令
打开CMD的方法
- 开始菜单——windows系统——密令提示符
- Win+R, 输入cmd 后回车
- 资源管理器的地址栏前面加上 cmd 路径
常用的DOS命令
#盘符切换 盘符+冒号
C:
#查看当前目录下的所有文件
dir
#切换目录
cd #change directory
cd.. #返回上级目录
cd + 文件路径
#清理屏幕
cls
#退出终端
exit
#查看电脑ip
ipconfig
#打开应用
cslc #计算器
maspaint #画图
notepad #文本编辑器
#ping 命令
ping www.baibu.com
#文件的操作
md 目录名 #新建文件夹
rd 目录名 #删除文件夹
cd> 文件名 #新建文件
del 文件名 #删除文件
计算机语言发展史
机器语言
机器语言是第一代语言,是直接将二进制代码输入给电脑的使用
汇编语言
汇编语言解决了机器语言无法读懂的问题,成为了第二代语言,目前应用:逆向工程、机器人、病毒……
高级语言
高级语言是第三代语言,大体上分为:面向过程和面向对象两大类。C语言就是经典的面向过程的语言,C++、JAVA是经典的面向对象的语言。
第零章_2 认识Java
day2 [2020/2/4]
Java的三大版本
JavaSE:标准版(桌面程序、控制台开发)
JavaME:嵌入式开发(手机、小家电)
JavaEE:E企业级开发(web端、服务器开发)
JDK、JRE、JVM
JDK:Java Development Kit(Java开发者工具,其中包括JRE、JVM)
JRE:Java Runtime Environment(Java运行环境,其中包括JVM)
JVM:JAVA Virtual Machine(Java虚拟机)
Java开发环境搭建
-
JDK下载与安装
-
配置环境变量
HelloWorld!
public class Hello{
public static void main(String[] atgs){
System.out.print("Hello, World!");
}
}
可能遇到的问题
- Java是区分大小写的
- 尽量使用英文
- 文件名 和 类名保持一致
- 符号使用了中文
Java程序运行机制
- 编译型
- 解释型

方法
day3 [2020/2/5]
什么是方法
System.out.println()
调用System类中的标准输出对象out中的println方法其中,System是类,out是对象,println()是方法
-
方法是语句的集合
- 方法是解决一类问题的步骤的有序集合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
-
方法的设计原则: 方法的本意是功能块,就是实现某个功能的语句快的集合。设计方法的时候最好保持方法的原子性,就是一个方法只完成一个功能,这样有利于我们后期的扩展。
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
···
方法体
···
return 返回值;
}
- 方法包含一个方法头和一个方法体。
- 修饰符:定义了方法的访问类型。
- 返回值类型:没有返回值的时候返回的关键字是
void。 - 方法名:方法的实际名称,需遵守驼峰命名法。
- 参数类型:类似占位符。
- 形式参数:用来定义作用。
- 实参:实际调用传递给方法的参数。
- 方法体:方法具体包含的语句,定义该方法的功能。
拓展了解:值传递(Java)和引用传递
方法的重载
- 重载就是在一个类中,有相同的函数名称,但形式参数不同的函数。
- 方法重载的规则。
- 方法名称必须相同。
- 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
- 方法的返回值类型可以相同也可以不同。
- 仅仅返回值类型不同不足以成为方法的重载。
实现理论
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如匹配失败,则编译器报错。
//方法重载练习
public class Day3 {
public static void main(String[] args) {
System.out.println(add(1,2,3));
System.out.println(add(1.5,2.5,3.5));
}
public static int add(int m, int n, int x) {
int sum = 0;
sum = m + n + x;
return sum;
}
public static double add(double m, double n, double x) {
double sum = 0;
sum = m + n + x;
return sum;
}
}
命令行传参
//main函数的参数是一个数组,循环打印这个数组
public class Day3 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
- 命令行传参步骤
- 找到Java源文件(eclipse:右键文件->Show In -> System Explorer)。
- 使用
javac进行编译。 - 返回到src目录下使用包名打开编译文件(java 包名.编译文件名 参数)。
可变参数
- 在方法声明中,在指定参数类型后加一个省略号(...)。
- 一个方法中只能有一个可变参数,他必须是方法的最后一个参数。任何普通参数必须在他之前声明。
递归
- 递归就是自己调用自己。
- 递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
//计算阶乘
public class Day3 {
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);
}
}
}
# Java基础语法
> day4[2021/2/6]
## 数据类型的拓展
- 不同就进制表示10
>二进制:`0b10`
八进制:`010`
十进制:`10`
十六进制:`0x10`
- 浮点数有误差,需要精确数字时,不使用浮点数。
## 包机制
> 类似文件夹
- 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。
- 包语句的语法格式为:
```java
package pkg1[. pkg2[. pkg3]];
-
一般利用公司域名倒置作为包名;
www.baidu.com就可以写为com.baidu.www
-
使用
import语句可以导入包
import package1[.packge2].(classname|*);
JavaDoc生成文档
package com.dong.day4;
/**
*
* @author Dong
* @version 1.0
* @since 1.8
*
*/
public class homework {
String name;
/**
* @author Dong
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
命令行下,使用javadoc生成文档
javadoc -encoding UTF-8 -charset UTF-8 homework.java
#-encoding UTF-8
#-charset UTF-8 指定字符类型
Java流程控制
day5[2021/2/7]
Scanner对象
-
Java提供了可以获取用户输入的类。java.util.Scanner,可以通过Scanner类来获取用户的输入。
-
基本语法:
Scanner s = new Scanner(Syatem.in); -
通过scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
package com.dong.day5; import java.util.Scanner; public class demo1 { public static void main(String[] arges) { //创建一个扫描器对象,用于接收键盘数据 Scanner scan = new Scanner(System.in); System.out.println("使用next方法接收: "); if (scan.hasNext()) { String str = scan.next(); System.out.println("输出内容为: " + str); } //凡是属于IO流的类如果不关闭,会一直占用资源。要养成好习惯,用完就关掉。 scan.close(); } } -
next()与nextLine()的区别:
-
next():
-
一定要读取到有效字符后才可以结束
-
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
-
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
-
next()不能得到带有空格的字符串。
-
-
nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所以字符。
- 可以获得空白。
-
数组
[2021/2/9]
数组的定义
- 数组是相同类型数据的有序集合。
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
- 其中每个数据称作数组的元素,每个数组元素可以通过一个下标来访问他们。
数组声明与创建
//dataType[] arrayRefVar; 声明数组
int[] nums;
//dataType[] arrayRefVar = new dataType[arraySize]
nums = new int[5]; //创建一个数组
int[] nums2 = new int[10];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
//arrays.length 获取数组长度
for (int i = 0; i < nums.lenth i+){
//计算数组所有元素之和
sum = sum + nums[i];
}
三种初始化数组
-
静态初始化
- int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-
动态初始化
-
int[] a = new int [2]; a[0] = 1; a[1] = 1;
-
数组的四个基本特点
- 长度确定。数组一旦被创建,他送的大小就是不可以改变的。
- 元素必须是相同类型,不允许出现混合类型。
- 元素可以是任何数据类型。
- 数组对象保存在堆中。
数组边界
- 下标的合法区间:[0, length-1],如果越界就会报错;
- ArrayIndexOutOfBoundsException:数组下标越界异常!
数组的使用
- 普通 for 循环遍历。
- for each 遍历
- 数组做方法入参
- 数组返回值
多维数组
-
多维数组可以看成数组的数组,比如二维数组就是一个特殊一维数组,其中每个元素都是一个一维数组。
-
二维数组
int a[][] = new int [2][5] //可以看成是一个2行5列的数组。
Arrays 类
-
数组的工具类 java.util.Arrays
-
常用的数组操作
- 打印数组
int[] intArray = { 1, 2, 3, 4, 5 }; String intArrayString = Arrays.toString(intArray); // 直接打印,则会打印出引用对象的Hash值 // [I@7150bd4d System.out.println(intArray); // [1, 2, 3, 4, 5] System.out.println(intArrayString);- 合并两个数组
int[] intArray = { 1, 2, 3, 4, 5 }; int[] intArray2 = { 6, 7, 8, 9, 10 }; // Apache Commons Lang 库 int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);- 数组反转
int[] intArray = { 1, 2, 3, 4, 5 }; ArrayUtils.reverse(intArray); //[5, 4, 3, 2, 1] System.out.println(Arrays.toString(intArray));- 移除元素
int[] intArray = { 1, 2, 3, 4, 5 }; int[] removed = ArrayUtils.removeElement(intArray, 3);//创建新的数组 System.out.println(Arrays.toString(removed));
冒泡排序
- 比较数组中,两个相邻的元素,如果第一个第一个比第二个数大,我们就交换们的位置
- 每次比较,都会产生一个较小或较大的数字
- 下一轮可以少排一次
- 依次循环,直到结束
int (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;
}
}
}
稀疏数组
- 个数组中大部分元素为 0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素和行列值记录在一个小规模的数组中,从而缩小程序的规模
package com.dong.Arraydemo;
public class demo01 {
public static void main(String[] atgs) {
int[][] array1 = new int [11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//输出原始数组
System.out.println("输出原始数组:");
for (int[] ints : array1) {
for(int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//专为稀疏数组保存
System.out.println("===================");
//1.获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0) {
sum++;
}
}
}
System.out.println("有效值的个数:" + sum);
//2.创建一个稀疏数组的数组
int[][] array2 = new int [sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
int count = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if (array1[i][j] != 0) {
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组:");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0] + "\t"
+ array2[i][1] + "\t"
+ array2[i][2] + "\t");
}
System.out.println("===================");
//稀疏数组还原
//1.读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
//2.给其中的元素还原他的值
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
//3.打印
System.out.println("输出还原数组:");
for (int[] ints : array3) {
for(int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
浙公网安备 33010602011771号