Java

第零章

day1 [2020/2/3]

认识计算机

  1. Computer:电子计算机,电脑
  2. 能够按照程序运行,自动,高速处理海量数据的现代化电子设备
  3. 由硬件和软件组成
  4. 有台式机,笔记本和大型计算机
  5. 应用领域:科学计算,数据处理,自动控制,计算机辅助设计,人工智能,网络等

计算机的硬件

  • 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的方法

  1. 开始菜单——windows系统——密令提示符
  2. Win+R, 输入cmd 后回车
  3. 资源管理器的地址栏前面加上 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开发环境搭建

  1. JDK下载与安装

  2. 配置环境变量

HelloWorld!

public class Hello{
    public static void main(String[] atgs){
        System.out.print("Hello, World!");
    }
}

可能遇到的问题

  1. Java是区分大小写的
  2. 尽量使用英文
  3. 文件名 和 类名保持一致
  4. 符号使用了中文

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]);
		}
	}

}

  • 命令行传参步骤
    1. 找到Java源文件(eclipse:右键文件->Show In -> System Explorer)。
    2. 使用javac进行编译。
    3. 返回到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));
    

冒泡排序

  1. 比较数组中,两个相邻的元素,如果第一个第一个比第二个数大,我们就交换们的位置
  2. 每次比较,都会产生一个较小或较大的数字
  3. 下一轮可以少排一次
  4. 依次循环,直到结束
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();
	}


  }

}

posted @ 2021-02-03 19:05  Dio酱想吃面包哒  阅读(97)  评论(0)    收藏  举报