当前位置:   article > 正文

JavaEE入门级别最全教程1--初学者必看_javaee教程

javaee教程

导读

相信很多初入编程的小伙伴对于语言有种选择恐惧症,对于Java也不知怎么去学,这期文章J哥会给大家整理最适合小白学习的JavaEE教程。

大数据的概述

  1. # 大数据与云计算的学习
  2. 概念:海量数据,具有高增长率、数据类型多样性、一定时间内无法使用常规软件进行捕捉、管理和处理的数据集合。
  3. 特征:4V特征(是大家普遍认可的)
  4. 大量
  5. 多样
  6. 高速
  7. 价值
  8. # 大数据能做什么?
  9. 在海量的各种各样类型的价值密度低的数据中,我们要进行的是: 数据采集、数据存储、数据清洗、数据分析、数据可视化。这个过程就是大数据要做的主要事情。
  10. # 使用语言
  11. JAVA8稳定(最新14)
  12. Write Once Run Anywhere (一次编译处处运行)
  13. JDK 开发环境
  14. JRE 运行环境
  15. JVM 虚拟机

Java基础

Java的数据类型分类

  1. // 基本数据类型
  2. 整型
  3. - 字节型:byte
  4. - 短整型:short
  5. - 整型:int
  6. - 长整型:long
  7. 浮点型
  8. - 单精度浮点型:float
  9. - 双精度浮点型:double
  10. 字符型:char
  11. 布尔型:boolean
  12. // 引用数据类型

标识符

  1. // 标识符,是由若干个字符组成的有序数列。在标识符中应该遵守的规则:
  2. 1.由字母数字下划线和$组成
  3. 2.不能以数字开头
  4. 3.不能与系统关键字或者保留字重名
  5. // 命名规范(驼峰命名法)
  6. 1.望文之意
  7. 2.驼峰命名法(大驼峰命名法、小驼峰命名法)
  8.    - 首字母大写
  9.    - 除首单词除外
  10.    - 没有特殊说明默认用小驼峰命名法

变量/常量

# 计算机内存中的一块存储空间,是存储数据的基本单元 值可以改变称之为变量 (年龄、体重) 值不可以改变称之为常量(一个人的出生日期) IDEA中操作了

类型转换

  1. // 强制类型转换
  2. // 自动类型转换
  3. // 特殊说明:
  4. 1.byte short char 类型的数据在进行运算的时候会自动的转换为int类型
  5. 2.浮点型转整型 会舍弃小数点后面的所有内容 只保留整数部分

常用运算符

  1. // 算数 + - * / % ++ --
  2. ++自增运算符
  3. 位于变量后表示先取值再进行加1的操作
  4. 位于变量前表示先进行加1后取值的操作
  5. --自减运算符
  6. 与++一致
  7. ++ 与 —— 的优先级最高
  8. // 赋值运算符 =
  9. 可以和其他运算符组合成 组合运算符
  10. 组合运算符 隐性的包含了类型转换
  11. // 关系运算符 > >= = < <= == !=
  12. // 1.关系运算符的结果一定是布尔类型的
  13. // 2.等值比较需要注意,使用的是双等号
  14. // 逻辑运算符 & | ! ^ && || 对两个布尔值进行的运算
  15. java python go javascript c
  16. & and && && && 与 :逻辑与,两真即为真,任意一个为假,结果即为假 false
  17. | or || || || 或 :逻辑或,两假即为假,任意一个为真,结果即为真 true
  18. ! not ! ! ! 非 :逻辑非,非真即假,非假即真。
  19. ^ 异或 :逻辑异或,相同为假,不同为真。
  20. && 短路与,如果前面的结果可以决定整体的运算结果,后面的表达式不参与运算
  21. || 短路或,如果前面的结果可以决定整体的运算结果,后面的表达式不参与运算
  22. javascript中逻辑运算符取决于右侧,右边为什么返回的值就为什么
  23. // 位运算符
  24. 只能位于两个整型的运算
  25. & 位与运算,对补码的每一位进行与运算
  26. | 位或运算,对补码的每一位进行或运算
  27. ^ 位异或运算,对补码的每一位进行异或运算
  28. ~ 按位取反运算 包括符号位
  29. << 按左移运算
  30. >> 按右移运算 最高位补符号位
  31. >>> 无符号位右移运算 左侧补0 就是最高位补的不是符号位 而是0
  32. 符号 64 32 16 8421
  33. 0 (0 0 0) (0000) --> 源码直接这样写
  34. 补码:举例:
  35. -45 = 32 + 8 + 4 + 1
  36. 1010 1101 源码
  37. 1101 0010 + 1 = 1101 0011 补码 向右移动两位 溢出的就不要了 1111 0100 11 --> 11
  38. 移动后的补码 : 1111 0100
  39. 再反转位源码 : 1000 1011 + 1 = 1000 1100
  40. 最终结果为 -12
  41. 在右移运算的时候,每像右移动一位,相当于除了一个2,但是这里遵循向下取整 11.25 = 12
  42. 面试题:
  43. 如何高效率的计算 2*8
  44. 2*82+了八次
  45. 8*28+8
  46. 2<<3 这个效率最高
  47. // 三目运算符
  48. 表达式 :布尔结果表达式/布尔变量?值1 : 值2
  49. 如果问好前面的布尔值是true,整体的结果为值1。否则整体的结果为值2
  50. // 运算符的优先级
  51. 整体看:一元运算符(只能操作一个数据:+ - ++ -- ! ~)>二元运算符(可以操作两个数据:+ - * /)>三元运算符(三目运算符 ? :)
  52. 赋值运算符的优先级最低
  53. 算数运算符中: 乘除模 > 加减
  54. 逻辑运算符中: 与 > 或、异或
  55. 小括号的优先级最高

流程控制

  1. // 流程控制分类
  2. 顺序结构/分支结构/循环结构 --java
  3. 顺序结构/分支结构/循环结构 --C
  4. 顺序结构: 代码从上往下,逐行依次执行。是程序执行的默认结构
  5. 分支结构: 程序在某一个节点遇到了多种可能向下执行的可能性,根据条件,选择一个分支继续执行
  6. 循环结构: 某一段代码需要被重复执行多次。
  7. // 分支流程控制-if/switch
  8. // 第一种 if else
  9. if (condition) { // condition 判断条件(布尔 boolean)
  10. // 代码段1
  11. }
  12. else{
  13. // 代码段2
  14. }
  15. // 第二种 if - else if
  16. if(){
  17. }else if(){
  18. }...
  19. else{
  20. }
  21. // switch
  22. switch(变量){
  23. case1{
  24. // 分支语句1
  25. }
  26. case2{
  27. // 分支语句2
  28. }...
  29. default:
  30. }
  31. // 实例
  32. int season = 1;
  33. switch (season) {
  34. case 1:
  35. System.out.println("春天");
  36. break;
  37. case 2:
  38. System.out.println("夏天");
  39. break;
  40. case 3:
  41. System.out.println("秋天");
  42. break;
  43. case 4:
  44. System.out.println("冬天");
  45. break;
  46. default:
  47. System.out.println("错误的季节");
  48. }
  49. switch具有穿透性:指的是,当switch的变量和某一个case值匹配上之后,将会跳过后续的case或者default的匹配,直接向后穿透。
  50. 为了杜绝穿透,可以使用关键字break;
  51. // 循环流程控制-for/while
  52. for(循环的起点、循环的条件、循环的步长){
  53. // 这里的代码,将在循环条件成立的时候重复执行
  54. // 这里 又叫 循环体
  55. }
  56. 循环起点: 只会执行一次 通常用于定义一个用来控制循环的变量
  57. 循环条件: 布尔结果的表达式,当成立的时候,循环体执行
  58. 循环步长: 记录每次循环发生的变化,通常用于改变控制循环的变量的值
  59. // while
  60. while (循环条件){
  61. // 循环体
  62. }
  63. // do-while
  64. do {
  65. // 循环体
  66. } while (循环条件);
  67. 如果从一开始的条件都是不成立的,那么do-whilewhile循环多执行一次逻辑
  68. // 两个关键字
  69. break 无论循环条件是否成立,立即结束循环
  70. continue 立即停止本次循环,立即进入下次循环
  71. 如果循环的次数是可预期的 推荐使用for循环
  72. 如果循环的次数是不可预期的,但是有明确的结束条件,推荐使用while循环
  73. // 循环标签
  74. OUTER: // 通过内部循环结束外部循环
  75. for (int i = 1; i <= 5; i++) {
  76. for (int j = 1; j <= 5; j++) {
  77. if (j == 3) {
  78. break OUTER;
  79. }
  80. System.out.println("i = "+ i + ", j = " + j);
  81. }
  82. }

循环案例

  1. // 输出0-100所有奇数和
  2. int sum = 0;
  3. for (int number = 1; number <= 100; number++) {
  4. if (number % 2 != 0) {
  5. // System.out.println(number);
  6. sum += number;
  7. }
  8. }
  9. System.out.println(sum);
  10. // 打印九九乘法表
  11. int line = 1;
  12. for (; line <= 9; line++) {
  13. for (int column = 1; column <= line; column++) {
  14. System.out.print(column + "x" + line + "=" +column*line + " "); // java的print没有换行 println自带一个换行符
  15. } // python 中print有换行 需要 print(公式,end="")
  16. System.out.println();
  17. }
  18. // 百钱白鸡
  19. // 已知 每只母鸡5元钱,每只公鸡三元钱,三只小鸡一元钱
  20. // 有100元去买鸡,要求正好花完100元,且购买100只鸡
  21. // 输出所有的购买方案
  22. for (int m = 0; m <= 100 / 5; m++) {
  23. for (int g = 0; g < 100 / 3; g++) {
  24. for (int x = 0; x <= 100; x += 3) {
  25. // 小鸡的数量是三的倍数
  26. if (m * 5 + g * 3 + x / 3 == 100 && m + g + x == 100) {
  27. System.out.println("可以买:母鸡" + m + "公鸡" + g + "小鸡" + x);
  28. }
  29. }
  30. }
  31. }

方法

  1. // 方法的概念
  2. 我们将需要被多次执行的逻辑包装起来,在需要的时候直接调用即可。
  3. 方法就是为了事项这个需求而存在的(使其可以重复调用、降低代码的冗余、提高代码的复用性与维护性)
  4. // 方法的定义与调用
  5. [访问权限修饰符][其他的修饰符]返回值类型 方法名称([参数列表]){
  6. 方法体
  7. }
  8. public class FirstMethod {
  9. public static void main(String[] args) {
  10. // 访问权限修饰符:访问权限修饰符
  11. // 其他修饰符: static
  12. // 返回值类型: void
  13. // 方法的名字: 小驼峰命名
  14. // 小括号里面写参数列表
  15. print(); // 调用方法
  16. }
  17. public static void print() { // 如果需要这个方法中的逻辑被执行,则需要进行方法的调用
  18. // 方法体
  19. System.out.println("This is my first method");
  20. }
  21. }
  22. ·方法是定义在类的内部的,与main函数并列(方法中不允许套用方法)
  23. 访问权限修饰符
  24. // 方法的参数
  25. 调用方法时,传入的数据被称为 参数(定义在小括号中)
  26. 形参: 定义方法时定义的参数
  27. 实参: 需要传的值
  28. 传参: 实参给形参赋值-->传参
  29. // 方法的返回值
  30. 函数调用时,一些情况下无需返回结果;另一些情况下则必须有返回值
  31. return 关键字:表示方法执行的结果;方法的结束。
  32. public class ReturnType {
  33. public static void main(String[] args) {
  34. System.out.println("和为:" + add(1, 2));
  35. }
  36. public static int add(int num1, int num2) { // int 返回值类型
  37. return num1 + num2;
  38. }
  39. }
  40. // 方法的重载
  41. 在一个类的方法中,如果多个方法满足如下条件,则他们之间的关系就是重载
  42. ·方法名相同
  43. ·参数不同
  44. ~参数不同,体现在参数的数量不同或者参数的类型不同 (方法的入口不同)
  45. 注意: 方法的重载与返回值没有关系!
  46. public class Overload {
  47. public static void main(String[] args) {
  48. add();
  49. add(2);
  50. add(3, 4);
  51. add("aa");
  52. }
  53. public static void add() {
  54. System.out.println("无参数");
  55. }
  56. public static void add(int num1) {
  57. System.out.println("add(int)");
  58. }
  59. public static void add(int num1, int num2) {
  60. System.out.println("add(int int)");
  61. }
  62. public static void add(String s) {
  63. System.out.println("add(String)");
  64. }
  65. }
  66. // 方法的递归
  67. 递归,是一种程序设计的思想。在解决问题的时候,可以将问题拆分成若干个小问题。通过解决这些小问题,逐渐解决这个大问题。
  68. package com.laity.basicSyntax.method;
  69. /**
  70. * @author : Laity
  71. * @Project: JavaLaity
  72. * @Package com.laity.basicSyntax.method
  73. * @date Date : 2021年11月12日 23:36
  74. * @Description: 方法的递归
  75. */
  76. public class Method2 {
  77. public static void main(String[] args) {
  78. // multiply(9);
  79. System.out.println(multiply(10));
  80. System.out.println(sum(100));
  81. }
  82. /**
  83. * /** 按ctrl + 回车
  84. * 计算一个数字的阶乘
  85. *
  86. * @param num 需要计算阶乘的数字
  87. * @return 计算的结果
  88. */
  89. public static int multiply(int num) {
  90. // 设置出口条件
  91. if (num == 1) {
  92. return 1;
  93. }
  94. // 递进与回归(自己调用自己)
  95. return num * multiply(num - 1);
  96. }
  97. public static int sum(int n) {
  98. if (n == 1) {
  99. return 1;
  100. }
  101. return n + sum(n - 1);
  102. }
  103. }

数组

  1. // 概念:一组连续的存储空间,存储多个相同数据类型的值(是一个数据容器)
  2. 特点:类型相同、长度固定。
  3. // 数组的声明 (注释:以后只要看到 关键字new 都是在堆上开辟空间)
  4. int [] array = new int[5]; // int[5] 表示array这个数组存储的容量为5
  5. 数组中的数据默认值为:
  6. 整型:0
  7. 浮点型:0.0
  8. 字符型:'\u0000'
  9. 布尔型:false
  10. 引用数据类型:null
  11. public class Array1 {
  12. public static void main(String[] args) {
  13. // 前言:使用[]表示一个数组,中括号前写数组中可以存储的数据类型
  14. // 1.声明一个数组
  15. // 2.数组的实例化:在为数组分配内存空间,并且分配数组中初始的值
  16. // new: 为数组开辟空间,需要使用关键字new
  17. // 实例化的同时,指定这个数组的长度
  18. // 数组中的数据默认值为:
  19. int[] array = new int[5]; // int[5] 表示存储的容量为5
  20. // 实例化数组的同时,指定这个数组中存储的数据
  21. // 此时这个数组中,默认存储了5个数据,也就是说数组的长度为5
  22. int[] array2 = new int[]{1, 2, 3, 4, 5};
  23. // 省略new int[]
  24. int[] array3 = {1, 2, 3, 4, 5};
  25. }
  26. }
  27. // 访问数组中的元素
  28. public class Array2 {
  29. public static void main(String[] args) {
  30. // 1.实例化一个数组
  31. int[] array = {1, 2, 3, 4, 5};
  32. // 2.用里面的元素时,两种操作:读和写
  33. int a = array[2];
  34. System.out.println(a);
  35. // 3..修改数组中的元素
  36. array[3] = 100;
  37. System.out.println(array[3]);
  38. }
  39. }
  40. // 数组的遍历
  41. 就是按照数组中元素存储的顺序,依次拿到数组中的每一个元素。
  42. package com.laity.basicSyntax.day1.bArray;
  43. /**
  44. * @author : Laity
  45. * @Project: JavaLaity
  46. * @Package com.laity.basicSyntax.day1.bArray
  47. * @date Date : 2021年11月13日 9:54
  48. * @Description: 数组的遍历
  49. */
  50. public class Array3 {
  51. public static void main(String[] args) {
  52. int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  53. for (int i = 0; i <= 9; i++) {
  54. System.out.println(array[i]);
  55. }
  56. for (int j = 0; j < array.length; j++){
  57. System.out.println(array[j]);
  58. }
  59. // 偷懒小技巧 只能idea支持 array.fori 100.fori
  60. // 增强for 循环
  61. // 思路:我依次使用数组中的每一个元素,给迭代变量进行赋值
  62. for (int element : array){
  63. System.out.println(element);
  64. }
  65. }
  66. } // 注:这个增强for循环同Python中: for i in array:print(i) 一致
  67. // 数组中的引用
  68. public static void main(String[] args) {
  69. int[] array = {10, 20};
  70. swap(array);
  71. System.out.println(array[0]);
  72. System.out.println(array[1]);
  73. }
  74. public static void swap(int[] arr) {
  75. int temp = arr[0];
  76. arr[0] = arr[1];
  77. arr[1] = temp;
  78. }
  79. // 数组的排序
  80. 将数组中的元素按照一定的大小关系进行重新排序
  81. 选择排序:固定值与其他值依次比较大小,互换位置。
  82. 冒泡排序:相邻的两个值比较大小,互换位置。
  83. JDK排序(java.util.Arrays.sort(数组)) // sort 方法 JDK提供默认的是升序排序(从小到大) Python中的sorted
  84. Arrays.sort(array);
  85. 顺序查询
  86. 二分查询

选择排序

  1. // 选择排序:固定值与其他值依次比较大小,互换位置。
  2. package com.laity.basicSyntax.day1.bArray;
  3. /**
  4. * @author : Laity
  5. * @Project: JavaLaity
  6. * @Package com.laity.basicSyntax.day1.bArray
  7. * @date Date : 2021年11月13日 13:44
  8. * @Description: 选择排序
  9. */
  10. public class ArraySort5 {
  11. public static void main(String[] args) {
  12. int[] array = {10, 5, 6, 3, 9, 2, 4};
  13. int[] arrays = {10, 5, 6, 3, 9, 2, 4, 0, 1, 4, 7, 8};
  14. sort1(array);
  15. sort2(arrays);
  16. for (int i : array) {
  17. System.out.print(i + ", ");
  18. }
  19. System.out.println();
  20. for (int i : arrays) {
  21. System.out.print(i + ", ");
  22. }
  23. }
  24. /**
  25. * 使用选择排序,对数组array进行升序排序(从小到大)
  26. *
  27. * @param array
  28. */
  29. public static void sort1(int[] array) {
  30. // 选择排序
  31. for (int i = 0; i < array.length - 1; i++) {
  32. for (int j = i + 1; j < array.length; j++) {
  33. if (array[i] > array[j]) {
  34. // 交换元素
  35. int temp = array[i];
  36. array[i] = array[j];
  37. array[j] = temp;
  38. }
  39. }
  40. }
  41. }
  42. public static void sort2(int[] array) {
  43. // 完整版选择排序
  44. // 用来控制发生了多少趟的比较
  45. for (int i = 0; i < array.length - 1; i++) {
  46. // 声明一个变量,用来记录剩余元素中的最小值所在的下标
  47. int min = i;
  48. // 让后续的每一个元素,依次和当前记录的最小值进行比较,找出新的最小值
  49. for (int j = i + 1; j < array.length; j++) {
  50. // 让第j位的元素和记录的最小值进行比较
  51. if (array[min] > array[j]) {
  52. // 更新最小值下标
  53. min = j;
  54. }
  55. }
  56. // 交换第i位和第min位的元素
  57. if (i != min) {
  58. int temp = array[i];
  59. array[i] = array[min];
  60. array[min] = temp;
  61. }
  62. }
  63. }
  64. }

冒泡排序

  1. // 冒泡排序:相邻的两个值比较大小,互换位置。
  2. package com.laity.basicSyntax.day1.bArray;
  3. /**
  4. * @author : Laity
  5. * @Project: JavaLaity
  6. * @Package com.laity.basicSyntax.day1.bArray
  7. * @date Date : 2021年11月13日 16:46
  8. * @Description: 冒泡排序
  9. */
  10. public class ArraySort6 {
  11. public static void main(String[] args) {
  12. // 实例化一个数组
  13. int[] array = {1, 3, 7, 2, 9, 4, 8, 0, 6, 5};
  14. // 对数组进行排序
  15. sort1(array);
  16. // 循环打印
  17. for (int i : array) {
  18. System.out.print(i + ",");
  19. }
  20. }
  21. /**
  22. * 使用冒泡排序对数组进行升序排序
  23. * 冒泡排序的核心思想:每趟比较从第0位开始依次比较两个相邻的元素,当满足交换条件的时候,交换
  24. *
  25. * @param array
  26. */
  27. public static void sort1(int[] array) {
  28. // 循环比较发生了多少趟
  29. for (int i = 0; i < array.length - 1; i++) {
  30. // 控制每一趟的比较发生了多少次
  31. // j < array.length - 1 - i
  32. for (int j = 0; j < array.length - 1 - i; j++) {
  33. // 依次比较两个相邻的元素
  34. if (array[j] > array[j + 1]) {
  35. int temp = array[j];
  36. array[j] = array[j + 1];
  37. array[j + 1] = temp;
  38. }
  39. }
  40. }
  41. }
  42. }

顺序查询

  1. package com.laity.basicSyntax.day1.bArray;
  2. /**
  3. * @author : Laity
  4. * @Project: JavaLaity
  5. * @Package com.laity.basicSyntax.day1.bArray
  6. * @date Date : 2021年11月13日 16:59
  7. * @Description: 顺序查询
  8. */
  9. public class FindElement7 {
  10. public static void main(String[] args) {
  11. int[] array = {1, 3, 5, 6, 9, 7, 2, 0, 10};
  12. int index = indexOf(array, 50);
  13. System.out.println(index); // 返回索引
  14. }
  15. /**
  16. * 使用顺序查询,查询数组中指定的元素出现的下标
  17. *
  18. * @param array 需要去查询的数组
  19. * @param element 需要查询的元素
  20. * @return 元素出现的下表;如果元素不存在,则返回-1;
  21. */
  22. public static int indexOf(int[] array, int element) {
  23. // 遍历数组中的每一个元素
  24. for (int i = 0; i < array.length; i++) {
  25. // 将每一个元素依次和要查询的元素进行比较
  26. if (array[i] == element) {
  27. // 如果比较通过,则这个下标就是要查询的元素下标
  28. return i;
  29. }
  30. }
  31. // 如果循环走完,还没有结果返回,那就说明这个元素不存在
  32. // 不存在的元素,我们统一返回-1
  33. return -1;
  34. }

二分查询

  1. // 即利用数组中间的位置,将数组分为前后两个子表。如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
  2. // 二分查询,要求数组必须是排序的,否则无法使用二分查询。(就是已经排好序的:升序或者降序的)
  3. package com.laity.basicSyntax.day2.bArray;
  4. /**
  5. * @author : Laity
  6. * @Project: JavaLaity
  7. * @Package com.laity.basicSyntax.day2.bArray
  8. * @date Date : 2021年11月14日 11:34
  9. * @Description: 二分查询
  10. */
  11. public class BinarySearch {
  12. public static void main(String[] args) {
  13. int[] array = {1, 4, 6, 7, 8, 10, 12, 13};
  14. int index = binarySearch(array, 10);
  15. System.out.println(index);
  16. }
  17. /**
  18. * 从一个数组中,使用二分查询法,查询元素的下标
  19. *
  20. * @param array 需要查询的数组
  21. * @param element 需要查询的元素
  22. * @return 下标
  23. */
  24. public static int binarySearch(int[] array, int element) {
  25. // 定义两个变量,分别记录范围的上线和下限
  26. int min = 0, max = array.length - 1;
  27. while (max >= min) {
  28. // 找到中间下标
  29. int mid = (max + min) / 2;
  30. // 判断中间的元素和要查询的元素的大小关系
  31. if (array[mid] == element) {
  32. return mid;
  33. } else if (array[mid] > element) { // 查左边
  34. // 修改范围的上线
  35. max = mid - 1;
  36. } else {
  37. // 修改范围的下限
  38. min = mid + 1;
  39. }
  40. }
  41. // 如果循环走完了,依然没有结果返回,说明要查询的这个数据在数组中不存在
  42. return -1;
  43. }
  44. }

可变长参数

  1. // 概念:可以接收多个类型相同的参数,个数不限,使用方法与数组相同。
  2. // 在调用方法的时候,实参的数量可以写任意多个。 本质还是一个数组
  3. // 语法:数据类型... 形参名(必须放到形参列表的最后位,且只能有一个)
  4. package com.laity.basicSyntax.day2.bArray;
  5. /**
  6. * @author : Laity
  7. * @Project: JavaLaity
  8. * @Package com.laity.basicSyntax.day2.bArray
  9. * @date Date : 2021年11月14日 12:13
  10. * @Description: 可变长度的参数列表
  11. */
  12. public class MutipleParameter {
  13. public static void main(String[] args) {
  14. int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  15. int Max = getMax(array);
  16. System.out.println("最大值:" + Max);
  17. int Min = getMin(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 可以这样写
  18. System.out.println("最小值:" + Min);
  19. }
  20. public static int getMax(int[] array) {
  21. int max = array[0];
  22. for (int element : array) {
  23. if (element > max) {
  24. max = element;
  25. }
  26. }
  27. return max;
  28. }
  29. public static int getMin(int... arrays) { // int... arrays 不等长参数的写法
  30. int min = arrays[0];
  31. for (int element : arrays) {
  32. if (element < min) {
  33. min = element;
  34. }
  35. }
  36. return min;
  37. }
  38. }

二维数组

  1. // int[][] array3 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
  2. package com.laity.basicSyntax.day2.bArray;
  3. /**
  4. * @author : Laity
  5. * @Project: JavaLaity
  6. * @Package com.laity.basicSyntax.day2.bArray
  7. * @date Date : 2021年11月14日 14:28
  8. * @Description: 二维数组
  9. */
  10. public class Array2 {
  11. public static void main(String[] args) {
  12. // 二维数组的元素访问
  13. // 1.实例化一个二维数组
  14. int[][] array = new int[5][3];
  15. // 2.获取数组中的小数组
  16. int[] arr = array[1];
  17. // 3.修改数组中的小数组
  18. array[1] = new int[]{2, 3, 4, 5, 6, 7, 8};
  19. System.out.println(array);
  20. // 4.获取小数组中的数据
  21. int ele = array[1][4];
  22. System.out.println(ele);
  23. // 5.修改小数组中的数据
  24. array[2][2] = 3;
  25. System.out.println(array);
  26. }
  27. public static void initArray() {
  28. // 1.二维数组的定义和实例化
  29. // int[][] array; // 声明一个二维数组,这个数组中,存储的每一个元素,都是一个小的一维数组
  30. // 1.1给定一个二维数组的长度,进行二维数组的实例化
  31. // 此时这个二维数组中存储的元素是 null
  32. int[][] array1 = new int[5][];
  33. for (int[] ints : array1) {
  34. System.out.println(ints);
  35. }
  36. // 1.2 给定一个二维数组的长度,同时给定一维数组的长度,进行实例化
  37. // 此时,这个二维数组中存储的一维数组,已经完成了实例化了
  38. // 这个3仅仅是初始的长度,后面可以改
  39. int[][] array2 = new int[5][3];
  40. System.out.println(array2);
  41. // 1.3 通过指定的值,进行数组的实例化
  42. int[][] array3 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
  43. System.out.println(array3);
  44. // 1.4 最简化
  45. int[][] array4 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
  46. System.out.println(array4);
  47. }
  48. }

Arrays工具类

  1. // 里面包含了若干个对数组进行操作的工具方法
  2. // 工具方法:方便对数组进行操作的方法
  3. package com.laity.basicSyntax.day2.bArray;
  4. import java.util.Arrays; // 导包
  5. /**
  6. * @author : Laity
  7. * @Project: JavaLaity
  8. * @Package com.laity.basicSyntax.day2.bArray
  9. * @date Date : 2021年11月14日 15:00
  10. * @Description: Arrays工具类
  11. * 里面包含了若干个对数组进行操作的工具方法
  12. * 工具方法:方便对数组进行操作的方法
  13. */
  14. public class ArrayTools {
  15. public static void main(String[] args) {
  16. // System.arraycopy();
  17. // 数组拷贝: 将一个数组中的指定位开始的元素拷贝到目标数组中的指定位,拷贝length长度的元素
  18. // 注意事项:不要发生下标越界的情况
  19. // arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
  20. // Object src: 原数组
  21. // int srcPos: 原数组指定位开始拷贝位置
  22. // Object dst: 目标数组
  23. // int dstPos: 目标数组指定位开始拷贝位置
  24. // int length: 拷贝的元素的数量 就是拷贝的长度
  25. int[] src = {1, 3, 5, 7, 8, 9, 10};
  26. int[] dst = {20, 30, 40, 50, 60, 70};
  27. System.arraycopy(src, 1, dst, 1, 3);
  28. System.out.println(Arrays.toString(dst));
  29. }
  30. /**
  31. * 基本工具的使用
  32. */
  33. public static void ArrayUsage() {
  34. // 1.准备一个数组
  35. int[] array = {1, 3, 5, 7, 8, 9, 10, 17};
  36. int[] arr = {1, 3, 4, 7, 8, 9, 10, 17};
  37. // 2.工具方法:
  38. // 如果newLength超出了原数组的长度,依然可以拷贝,只是在最后的结果添加了 0
  39. int[] ret = Arrays.copyOf(array, 5); // 从原数组中拷贝指定数量的元素,到一个新的数组中,并返回这个新的数组
  40. // 2.1 将数组中的元素拼接成字符串返回
  41. String ret1 = Arrays.toString(ret); // 拼接成字符串返回
  42. System.out.println(ret1);
  43. // 2.2 从原数组中拷贝指定的范围 [from, to) 的元素,到一个新的数组中,并且返回这个新的数组
  44. // to 是可以越界的,后面会用0指定的位数,form是不可以越界的,否则会报异常的
  45. int[] ret3 = Arrays.copyOfRange(array, 2, 7);
  46. System.out.println(Arrays.toString(ret3));
  47. // 2.3 判断两个数组是否相同
  48. boolean equals = Arrays.equals(array, arr); // 这个有快捷键 .var
  49. System.out.println(equals);
  50. // 2.4 使用指定的数据填充数组
  51. Arrays.fill(array, 8); // 将数组的所有元素都填充为8
  52. System.out.println(Arrays.toString(array));
  53. // 2.5 对数组中的元素进行排序(升序排序)
  54. Arrays.sort(array);
  55. System.out.println(Arrays.toString(array)); // JDK排序
  56. // 2.6 使用二分查询法,查询数组中指定的元素出现的下标
  57. int index = Arrays.binarySearch(array, 7);
  58. System.out.println(index);
  59. }
  60. }

数组的拓展功能

  1. package com.laity.basicSyntax.day2.bArray;
  2. import java.util.Arrays;
  3. /**
  4. * @author : Laity
  5. * @Project: JavaLaity
  6. * @Package com.laity.basicSyntax.day2.bArray
  7. * @date Date : 2021年11月14日 23:45
  8. * @Description: 数组中的拓展到功能
  9. */
  10. public class ArrayExtension {
  11. public static void main(String[] args) {
  12. // 数组的扩容: 实例化一个新的指定长度的数组,将原来数组中的元素依次拷贝到这个新的数组中即可
  13. int[] original = {1, 4, 7, 8, 9};
  14. // 需求:在现有元素的后面添加一个 0
  15. // 1. 对original数组进行扩容,使其容量加1
  16. int[] newArray = new int[original.length + 1];
  17. // 2. 依次将original中的每一个元素拷贝到新的数组中
  18. for (int i = 0; i < original.length; i++) {
  19. newArray[i] = original[i];
  20. }
  21. // 3.将 0 放到newArray的最后一位
  22. newArray[newArray.length - 1] = 0;
  23. // 4.重定向original的地址指向
  24. original = newArray;
  25. // 5.遍历数组,输出数组中的所有的元素
  26. System.out.println(Arrays.toString(original)); // [1, 4, 7, 8, 9, 0]
  27. int[] array = add(original, 10);
  28. System.out.println(Arrays.toString(array));
  29. // array = remove(original, 3);
  30. array = newRemove(original, 3);
  31. System.out.println(Arrays.toString(array));
  32. }
  33. /**
  34. * 关于数组扩容的基本思路
  35. */
  36. public static void growup() {
  37. // 关于数组扩容的基本思路
  38. }
  39. /**
  40. * 希望将一个元素拼接到一个现有数组的最后
  41. *
  42. * @param array 现有的数组
  43. * @param element 需要拼接的元素
  44. * @return 添加元素之后的数组
  45. */
  46. public static int[] add(int[] array, int element) {
  47. // 1. 对original数组进行扩容,使其容量加1
  48. // 2. 依次将original中的每一个元素拷贝到新的数组中
  49. array = Arrays.copyOf(array, array.length + 1);
  50. // 3.将 element 放到newArray的最后一位
  51. array[array.length - 1] = element;
  52. // 4.返回拼接好的数组
  53. return array;
  54. }
  55. /**
  56. * 需要从array数组中移除指定下标位的元素
  57. *
  58. * @param array 被操作的数组
  59. * @param element 被删除元素的下标
  60. * @return 返回删除元素之后的数组
  61. */
  62. public static int[] remove(int[] array, int element) {
  63. if (element < 0 || element >= array.length) {
  64. return array;
  65. }
  66. // 1.实例化一个新的数组,新数组的长度是原数组的长度-1
  67. int[] newArray = new int[array.length - 1];
  68. // 2.拷贝前后两部分的数据
  69. System.arraycopy(array, 0, newArray, 0, element);
  70. System.arraycopy(array, element + 1, newArray, element, array.length - 1 - element);
  71. // 3.返回结果
  72. return newArray;
  73. }
  74. public static int[] newRemove(int[] array, int element) {
  75. if (element < 0 || element >= array.length) {
  76. return array;
  77. }
  78. // 用element位之后的元素依次向前覆盖
  79. System.arraycopy(array, element + 1, array, element, array.length - 1 - element);
  80. // 返回结果
  81. return Arrays.copyOf(array, array.length - 1);
  82. }
  83. }

数组的堆和栈

int[] array = new int[5];

 

快捷键整理

// 1. sout
// 2. main
// 3. 循环遍历数组的时候: array.fori   array.for
// 4. Arrays中 Arrays.equals(array, arr).var
// 5. Alt+Enter
// 6. 重写父类的方法 父类的方法名回车即可
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/664135
推荐阅读
相关标签
  

闽ICP备14008679号