zoukankan      html  css  js  c++  java
  • JavaSE02

    控制流程

    if switch

    switch 穿透(注意 break的使用)

    Java 反编译

    字符串的本质还是数字
    java -- class(字节码文件) -- IDEA(反编译)
    
    找到项目结构(project struct) -- project compile output(项目编译输出路径) -- 打开这个路径发现都是class文件 -- 直接打开乱码 -- 在IDEA打开该文件夹,将想看的文件拷过来 -- 看到反编译后的结果
    
    hashcode()
    

    循环流程

    while do...while

    for

    快捷键 eg. 100.for

    方法

    方法的定义

    Java的方法类似其他语言的函数,是一段用来完成特定功能的代码片段

    方法包含一个方法头方法体

    修饰符 返回值类型 方法名(参数类型 参数名) {
        方法体
        ...
        return 返回值;
    }
    //没有返回值 返回值类型为 viod
    

    Java 的参数都是值传递(非引用传递)

    package com.oop;
    
    //Demo01 类
    public class Demo01 {
        //main 方法
        public static void main(String[] args) {
            int a = 1;
            System.out.println(a);  // 1
    
            //a 作为参数传入,然而本质是将 a 的值传递,并非 a 这个引用
            Demo01.change(a);
            //传递的是 a 的值,也就是 1,所以该作用域的 a 的值并没有改变
            System.out.println(a);  // 1
        }
    
        //定义一个方法
        public static void change(int a){
            a = 10;
        }
    }
    

    方法的重载

    重载:在一个类中,有相同的函数名称,但形参不同的函数

    规则:

    • 方法名称必须相同
    • 参数列表必须不同(个数 / 类型 / 参数排列顺序)
    • 返回类型可以不同,但仅仅返回类型不同不足以成为方法的重载!

    命令行传参

    有时候希望运行一个程序时再给它传递信息...

    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>javac Demo02.java
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>java Demo02
    错误: 找不到或无法加载主类 Demo02
    
    # 要退到包所在的路径下,并把包名写全
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>cd ../
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxing>cd ../
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccom>cd ../
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrc>java com.guanxing.method.Demo02 i can do all things
    args[0]: i
    args[1]: can
    args[2]: do
    args[3]: all
    args[4]: things
    

    编译时出现编码问题

    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>javac Demo02.java
    Demo02.java:7: 错误: 编码GBK的不可映射字符
                System.out.println("args[" + i + "]锛?" + args[i]);
                                                    ^
    1 个错误
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>javac Demo02.java -unicode utf-8
    javac: 无效的标记: -unicode
    用法: javac <options> <source files>
    -help 用于列出可能的选项
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>javac -help
    用法: javac <options> <source files>
    其中, 可能的选项包括:
      -g                         生成所有调试信息
      -g:none                    不生成任何调试信息
      -g:{lines,vars,source}     只生成某些调试信息
      -nowarn                    不生成任何警告
      -verbose                   输出有关编译器正在执行的操作的消息
      -deprecation               输出使用已过时的 API 的源位置
      -classpath <路径>            指定查找用户类文件和注释处理程序的位置
      -cp <路径>                   指定查找用户类文件和注释处理程序的位置
      -sourcepath <路径>           指定查找输入源文件的位置
      -bootclasspath <路径>        覆盖引导类文件的位置
      -extdirs <目录>              覆盖所安装扩展的位置
      -endorseddirs <目录>         覆盖签名的标准路径的位置
      -proc:{none,only}          控制是否执行注释处理和/或编译。
      -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
      -processorpath <路径>        指定查找注释处理程序的位置
      -parameters                生成元数据以用于方法参数的反射
      -d <目录>                    指定放置生成的类文件的位置
      -s <目录>                    指定放置生成的源文件的位置
      -h <目录>                    指定放置生成的本机标头文件的位置
      -implicit:{none,class}     指定是否为隐式引用文件生成类文件
      -encoding <编码>             指定源文件使用的字符编码
      -source <发行版>              提供与指定发行版的源兼容性
      -target <发行版>              生成特定 VM 版本的类文件
      -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
      -version                   版本信息
      -help                      输出标准选项的提要
      -A关键字[=值]                  传递给注释处理程序的选项
      -X                         输出非标准选项的提要
      -J<标记>                     直接将 <标记> 传递给运行时系统
      -Werror                    出现警告时终止编译
      @<文件名>                     从文件读取选项和文件名
    
    # 原来是encoding
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>javac Demo02.java -encoding utf-8
    
    C:UsersharrisDesktopmyjavacodeJavaSEasic_grammarsrccomguanxingmethod>
    

    可变参数(不定项)

    在方法声明中,在指定参数类型后加一个省略号(...)

    一个方法中只能指定一个可变参数,且必须是方法的最后一个参数!

    其实就是传入一个数组

    public class Demo03 {
        public static void main(String[] args) {
            //调用可变参数的方法
            printMax(new double[]{1, 2, 3, 4, 5});
            printMax(34, 3, 5, 34.5);
        }
    
        public static void printMax(double... numbers) {
            if (numbers.length == 0) {
                System.out.println("No args 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);
        }
    }
    

    数组

    数组是相同数据类型(数据类型任意)的有序集合

    数组的声明和创建

    //声明数组变量,才能在程序中使用数组
    int[] numbers;
    
    //创建一个存放int类型,长度为10的数组
    numbers = new int[10];
    
    //或者一步到位
    int[] numbers = new int[10];
    

    数组的四个基本特点

    • 其长度是确定的,数组一旦创建,它的大小就是不可改变
    • 元素必须是相同类型,不允许出现混合类型
    • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
    • 数组变量属于引用类型,数组也可以看做是对象,数组中的元素则相当于该对象的成员变量
    • 数组本身就是对象,在 Java 中对象存储在堆中。因此,数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的

    遍历数组对象

    int[] arr = {1, 2, 3, 4, 5};
    
    for (int element: arr) {
        System.out.printIn(element);
    }
    
    //数组可以封装成参数
    public static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.printIn(arr[i]);
        }
    }
    

    二维数组

    int[][] arr = {{1, 2}, {3, 4}, {5, 6}};
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            System.out.printIn(arr[i][j]);
        }
    }
    

    Arrays类

    import java.lang.reflect.Array;
    import java.util.Arrays;
    
    public class ArrayDemo {
        public static void main(String[] args) {
            int[] a = {1, 2, 4, 6, 78, 23, 78, 49};
    
            System.out.println(a);  //[I@1b6d3586
            //打印数组元素 Arrays.toString
            System.out.println(Arrays.toString(a)); //[1, 2, 4, 6, 78, 23, 78, 49]
    
            //顺序打印
            Arrays.sort(a);
            System.out.println(Arrays.toString(a)); //[1, 2, 4, 6, 23, 49, 78, 78]
            
        }
    }
    
    //其他常用方法
    //给数组赋值:fill
    //比较数组中的元素值:equals
    //查找数组元素:binarySearch(对有序数组进行二分查找)
    

    冒泡排序

    import java.util.Arrays;
    
    public class ArrayDemo02 {
        public static void main(String[] args) {
            int[] arr = {1, 3, 2, 5, 6, 9, 8, 4};
            bubbleSort(arr);
        }
        //冒泡排序
        //1.比较数组中,两个相邻的元素,大的往后移
        //2.每一次比较都会产生一个最大或最小的数字
        //3.下一轮则可以少一次排序
        //4.依次循环,直到结束
    
        public static void bubbleSort(int[] a) {
            for (int i = 0; i < a.length; i++) {
                for (int j = 0; j < a.length - i -1; j++) {
                    if (a[j] > a[j+1]) {
                        int temp = a[j+1];
                        a[j+1] = a[j];
                        a[j] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(a));
        }
    }
    

    稀疏数组

    当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存

    稀疏数组的处理方式:

    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

    第 0 行的 6 7 8 的意思:这个数组为6行7列,其中有8个有效元素

  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/straightup/p/14503447.html
Copyright © 2011-2022 走看看