• 【基础语法篇】Java必备基础(思维导图+代码)



    在这里插入图片描述

    ⭐代码和思维导图详见仓库:Sivan_Xin的代码仓库—Java语法。如果觉得有帮助的话,可以帮作者点一个star⭐哦~

    🎉 关于Java语法部分的知识体系主要分三篇文章进行讲解:
    🎉【基础语法篇】【面向对象篇】【高级语法篇】
    🎉大家可以在日常的学习生活中进行参考,笔记内容并不是绝对权威,所以请保持自己独立思考的能力。

    本文共5600字,读完约需12分钟。
    在这里插入图片描述

    基本语法

    初识JDK

    JDK:jdk是java软件开发工具包,包含jre和JAVA工具。

    • JAVA工具:
      javac:JAVA编译器(程序—字节码);
      java:JAVA解释器(解释编译后的字节码文件);
      jdb:JAVA调试器;
      javadoc:文档生成器。

    • jre:
      JAVA运行环境,包括jvm和系统类库等。

    ps:本文使用JDK8的版本。

    输入与输出

    • .是一个运算符,它可以让类或者对象做事情,看不懂也没有关系,可以先记下来。

    从输出设备(显示屏)输出:

    System.out.println("Hello World");  //换行输出
    
    System.out.print("Hello World");   //普通输出
    
    System.out.printf("%.2f",a);   //对结果取2位小数输出
    
    System.out.println("2+3="+(2+3));  // +用来连接字符串 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    从输入设备(键盘)输入:

    Scanner in = new Scanner(System.in);   //关于这句话,会在面向对象篇详细介绍。
    
    in.nextInt();    //读入 一个int型的数据。
    
    in.nextDouble();  //读入 一个double型的数据。
    
    in.nextLine()   //读入 一行。
    
    in.next();  //读入 获取有效字符到结束字符之间的内容。
    
    in.hasNext();   //判断是否有输入数据,如果有,则返回true,并将所输入的数据读取备用。
    
    in.hasNextInt();   //判断输入的数据是否为int,如是返回true,不是返回false。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    条件与循环

    • Java与C相同的地方
      if-else for do-while while switch-case 语句
      关于这些语句的用法,可以参考这篇文章:C语言学习必备笔记

    跳出多重循环 —标号的使用

    OUT:   //标号,说明下面的循环叫这个名字。  
    for(int i=1;i<10;i++) {
    	for(int j=1;j<10;j++) {
    		break OUT;  //跳出OUT标号的循环
    			}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    增强for循环(for—each):
    不可以拿来修改数组的值,但是可以拿来做遍历。

    for(<类型> <类型名称><数组>) {}
    
    //使用for—each循环遍历数组:
    for(int i:a){   //循环的每一轮,让i等于a数组中的值。依次向下。
        System.out.print(i+" ");  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    一维数组与二维数组

    < 类型 > [ ] < 变量名称 > = new int [ 元素个数 ];

    • 数组的定义: int [] a = new int [10] ,就创建了一个有10个元素的数组。
    • 获取数组的长度:<数组变量名称.length>

    扩展:
    数组之间的赋值就是管理权限的赋予。

    • b得到a的管理权限实例
    public static void main(String[] args) {
            int []a={1,2,3};
            int []b={1,2,3};
            if(a.equals(b)){
                System.out.println("1");
            }
            if(a==b){
                System.out.println("2");
            }
            a=b;  //赋予管理权限。
            if(a.equals(b)){
                System.out.println("a");
            }
            if(a==b){
                System.out.println("b");
            }
            }
            输出结果:a
                    b
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在java中,数组变量与其他普通变量不同,数组变量充当一个管理者,管理存放数组的那个区域。


    二维数组:

    • 定义二维数组:int [] []a =new int [3][5]; ,可以理解为三行五列的矩阵。
    • 二维数组初始化:int [][]a={{1,2,3},{1,2,3}};

    扩展:

    • 二维数组遍历的两种方法
    public class demo {
        public static void main(String[] args) {
            int [][]a=new int[11][11];
            a[1][2]=2;
            a[2][3]=1;
            //法一
            for(int []row: a){  
                for(int date:row){
                    System.out.printf("%d\t",date);
                }
                System.out.println();
            }
            //法二
            for(int i=0;i<a.length;i++){   
                        for(int j=0;j<a.length;j++){
                    System.out.printf("%d\t",a[i][j]);
                }
                System.out.println();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    函数及其他补充

    在Java中,调用函数又叫调用方法。这里只介绍Java中最简单的使用函数语法。

    /*函数定义*/
    public     static     void     main   (int a,int b){  函数体  }
    访问修饰符   修饰关键字  函数类型  函数名称     参数表
    
    /*函数调用*/
    函数名(a,b);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    一些补充:

    /* 布尔类型 */
     boolean isprime = true;
     if(isprime){
         ...... 
     }
     /* 逻辑运算的结果是true/false。 */
     
      /*浮点数运算误差*/
    	double a=0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
    	double b=1.0;
    	System.out.println(a==b);   //a=0.999999...
    	
    	 //判断两浮点数是否相等。
    	System.out.println(Math.abs(a-b)<1e-6);  //abs为取绝对值。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Java常用类

    Number&Math类

    Java为每一个普通类型都提供了一个包裹类型。因为在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。
    所有的包装类 (Integer、Long、Byte、Double、Float、Short) 都是抽象类 Number 的子类。
    在这里插入图片描述

    • 装箱与拆箱
      这种由编译器特别支持的包装称为装箱,当数据类型被当作对象使用时,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置数据类型。
    基础类型包裹类型
    booleanBoolean
    charCharacter
    intInteger
    doubleDouble
    floatFloat
    • Integer类型的缓存
      Integer类型在-128到127之间的范围被缓存,如果创建这个范围的两个值相同的对象,每个对象地址相同,但是超过127,会重新new一个对象,此时每个对象地址不相同。

    • 包装类的API
      API详见:包装类API文档

    Math:
    Java 的 Math 包含了用于执行基本数学运算的属性和方法。
    Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

    Arrays类

    Arrays类经常用于对数组的操作中。

    String类

    String不是基础类型,它是java提供的一个类。String与数组类似,作为管理者管理数据。

    关于==和equals

    String s1=new String("123");
    String s2=new String("123");
    //判断两个String是否是同一地址:s1==s2   false
    //判断两个String的内容是否相同:s1.equals(s2)   true
    
    • 1
    • 2
    • 3
    • 4

    String类中重写了equals方法,所以比较的是内容。

    更多详细情况请参考下面的文章: 浅谈Java中的内存

    其他类

    自己可以去JDK的官方文档中去了解,这里举出一些常用的类。

    Object

    Java中所有的类都是从Object继承的,也就是所有类的父类。进而可知,所有其他类都可以使用/重写Object类的方法。

    • 常用的Object类的方法
    1. toString方法,用来显示对象的字符串形式。
    2. equal()方法,在Object类中的equals方法只是简单地比较地址是否相等。
      而多数Java类中实现了重写equals方法,使其比较内容是否相等。在比较两个对象是否相等时,一般使用equals方法,当然前提是对象所属的类已经重写equals了。
    3. hashCode()方法,一般在HashMap中重写,如果自定义类使用了HashMap,那么它也需要重写hashCode。
    4. clone()方法:clone 方法是浅拷贝,对象的引用类型引用同一个对象,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
      如果某一个类的成员变量不是原始变量(八大基本类型)或者不可变类(如String、包装类型),必须通过深度clone(生成一个不同于原对象成员变量的成员变量)来确保成员变量的不可变性。
      注意:使用clone方法要先实现Clonable接口,再重写Object中的clone。

    异常处理

    Java语言执行中发生的不正常的情况称为异常。
    在Throwable异常下分为两种:

    • Error:Java虚拟机无法解决的严重问题。不编写针对的代码处理。
    • Exception:因编程错误或偶然的外在因素导致的一般性问题。可以用代码处理。Exception又分为编译时异常(IOException)和运行时异常(RuntimeException)

    常见异常

    运行时异常:

    • ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。
    • NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
    • NumberFormatException 数据格式异常
    • ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。

    编译时异常:

    • IOException
      FileNotFoundException:表示尝试打开由指定路径名表示的文件失败。
    • SQLException

    异常的处理

    过程一:“抛”。程序执行中若碰到异常,就会在异常代码处生成对应异常类的对象,并将对象抛出。

    生成异常类的对象有两种方式:

    1. 自动生成的异常对象。
    2. 手动生成一个异常对象,并throw。

    过程二:“抓”。异常的处理方式。

    处理异常有两种方式:

    1. try-catch-finally:真正解决异常。
    2. throws:向上抛出异常,但是没有处理。
      (具体操作在源程序中指出)
      处理异常的几点注意:
    • 在方法重写中,子类重写的方法抛出的异常不能大于父类被重写的方法抛出的异常。
    • 对于运行时异常一般不用try-catch。编译时异常才会使用try-catch。
    • 处理异常的方法getMessage()printStackTrace() 来返回异常信息。

    throw

    表示生成一个异常对象。

    1. 如果生成的是运行时异常对象,则在运行中直接抛出。
    2. 如果生成的是编译时异常对象,需要在方法中抛出,并且在main方法中捕获。

    用户自定义异常类

    1. 自定义异常类需要继承父类Exception/RunTimeException。
    2. 自定义异常类需要一个ID作为标识。
    3. 自定义异常类一般需要两个构造器,一个无参,一个带参。

    ⭐码字不易,求个关注⭐
    ⭐点个收藏不迷路哦~⭐

  • 相关阅读:
    论文笔记:Multi-Concept Customization of Text-to-Image Diffusion
    SpringMVC
    redis常用命令
    安装React脚手架
    黑客入侵机构,导致2万条信息被卖
    基于51单片机驱动A4988实现步进电机逆时针转动
    【Java面试】Mybatis中#{}和${}的区别是什么?
    【转】浅谈威胁狩猎(Threat Hunting)
    基于Java+springboot+SSM的医疗报销系统的设计与实现
    万字总结线程池
  • 原文地址:https://blog.csdn.net/weixin_62633072/article/details/125500591