• 【Java】基础知识


    Java程序的结构

    1. 源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。
    2. 类:类中带有一个或多个方法。方法必须在类的内部声明。
    3. 方法:在方法的花括号中编写方法应该执行的语句。
    • 总结一下:类存在于源文件里面;方法存在于类中;语句存在于方法中。

    注意:在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰的类名字相同。

    JDK、JRE、JVM之间的关系?

    • JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。
    • JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。
    • JVM:Java虚拟机,运行Java代码

    Java 注释

    文档注释

    文档注释: /** 文档注释 */,可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档

    文档注释生成的命令

    javadoc -d 目录名字 -author -version -encoding UTF-8 -charset UTF-8 目标文件名字.java

    说明:

    • 在cmd中,使用javadoc工具从Java源码中抽离出注释
    • -d 创建目录 myHello为目录名
    • -author 显示作者
    • -version 显示版本
    • -encoding UTF-8 -charset UTF-8 字符集修改为UTF-8

    Java 标识符

    定义:在程序中由用户给类名、方法名或者变量所取的名字。

    【硬性规则】

    • 标识符中可以包含:字母、数字以及 下划线和 $ 符号等等。
    • 注意:标识符不能以数字开头,也不能是关键字,且严格区分大小写。

    【软性建议】

    • 类名:每个单词的首字母大写(大驼峰)
    • 方法名:首字母小写,后面每个单词的首字母大写(小驼峰)
    • 变量名:与方法名规则相同

    Java 数据类型

    基本数据类型

    1. 四类:整型、浮点型、字符型以及布尔型
    2. 八种:

    注意:

    • 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
    • 整形和浮点型都是带有符号的
    • 整型默认为int型,浮点型默认为double
    • 字符串属于引用类型

    Java的包装器

    包装器只有基本数据类型有

    包装器
    关键字包装器
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    charCharacter
    booleanBoolean

    Java的输入输出

    输出到控制台

    基础语法

    1. System.out.println(msg);// 输出一个字符串, 带换行
    2. System.out.print(msg);// 输出一个字符串, 不带换行
    3. System.out.printf(format, msg);// 格式化输出

    说明:

    • println 输出的内容自带 \n,  print 不带 \n
    • printf 的格式化输出方式和 C 语言的  printf 是基本一致的.

    从键盘输入

    使用 Scanner 读取字符串/整数/浮点数

    1. import java.util.Scanner;  // 需要导入 util 包
    2. Scanner sc = new Scanner(System.in);
    3. System.out.println("请输入你的姓名:");
    4. String name = sc.nextLine();
    5. System.out.println("请输入你的年龄:");
    6. int age = sc.nextInt();
    7. System.out.println("请输入你的工资:");
    8. float salary = sc.nextFloat();
    9. System.out.println("你的信息如下:");
    10. System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
    11. sc.close(); // 注意, 要记得调用关闭方法

    Java的方法

    Java方法定义的格式

    1. // 方法定义
    2. 修饰符 返回值类型 方法名称([参数类型 形参 ...]){
    3. 方法体代码;
    4. [return 返回值];
    5. }

    注意事项:

    • 在java当中,方法必须写在类当中
    • 在java当中,方法不能嵌套定义
    • 在java当中,没有方法声明一说

    Java方法的参数说明

    • 在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
    • 对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用

    方法重载

    • 1. 方法名必须相同
    • 2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
    • 3. 与返回值类型是否相同无关
    • 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的

    方法签名 -- 方法能重载的原理

    方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

    【测试代码】

    1. public class TestMethod {
    2.   public static int add(int x, int y){
    3.     return x + y;
    4.  }
    5.   public static double add(double x, double y){
    6.     return x + y;
    7.  }
    8.   public static void main(String[] args) {
    9.     add(1,2);
    10.     add(1.5, 2.5);
    11.  }
    12. }

    上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:

    • 1. 先对工程进行编译生成.class字节码文件
    • 2. 在控制台中进入到要查看的.class所在的目录
    • 3. 输入:javap -v 字节码文件名字即可

    方法签名中的一些特殊符号说明:剩下的基本数据类型的特殊字符都是取其首字母大写

    方法签名的特殊符号
    特殊字符数据类型
    boolean
    [数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组)
    引用类型,以L开头,以;结尾,中间是引用类型的全类名

    Java数组

    Java的数组定义与使用

    1. 数组的创建

    T[] 数组名 = new T[N];

    1. int[] array1 = new int[10];    // 创建一个可以容纳10个int类型元素的数组
    2. double[] array2 = new double[5];  // 创建一个可以容纳5个double类型元素的数组
    3. String[] array3 = new double[3];  // 创建一个可以容纳3个字符串元素的数组

    2. 数组的初始化

     静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

    语法格式: T[] 数组名称 = {data1, data2, data3, ..., datan};

    1. int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
    2. double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
    3. String[] array3 = new String[]{"hell", "Java", "!!!"};

    【注意事项】

    • 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
    • 静态初始化时, {}中数据类型必须与[]前数据类型一致。
    • 静态初始化可以简写,省去后面的new T[]。
    • 静态和动态初始化也可以分为两步,但是省略格式不可以。
      1. int[] array1;
      2. array1 = new int[10];
      3. int[] array2;
      4. array2 = new int[]{10, 20, 30};
      5. // 注意省略格式不可以拆分, 否则编译失败
      6. // int[] array3;
      7. // array3 = {1, 2, 3};
    • 如果没有对数组进行初始化,数组中元素有其默认值
      • 如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:
      • 如果数组中存储元素类型为引用类型,默认值为null

    3. 数组的遍历

    • 在数组中可以通过  数组对象.length 来获取数组的长度
      1. int[]array = new int[]{10, 20, 30, 40, 50};
      2. for(int i = 0; i < array.length; i++){
      3.   System.out.println(array[i]);
      4. }
    •  可以使用 for-each 遍历数组
      1. int[] array = {1, 2, 3};
      2. for (int x : array) {
      3.   System.out.println(x);
      4. }

    Java的数组是应用类型

    1. 初始JVM的内存分布

    说明】:

    • 程序计数器(PC Register):只是一个很小的空间,保存下一条执行的指令的地址
    • 虚拟机栈(JVM Stack):与方法调用相关的一些信息,每一个方法在执行时,都会先创建一个栈帧,栈帧中包含有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是方法执行时相关的一些信息。比如:局部变量、当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
    • 本地方法栈(Native Method Stack):本地方法栈与虚拟机栈的作用类似,只不过保存的内容是Native方法的局部变量。
    • 堆(Heap):JVM所管理的最大内存区域。使用new创建的对象都是在堆上保存堆是随着程序开始运行时而创建的,随着程序的退出而销毁,绥中的数据只要还有在使用,就会被销毁。
    • 方法区(Method Area):用于存储已被虚拟加加载的类信息、常量、静态变量、即编译编译后的代码数据。方法编译出的字节码就是保存在这个区域中的。

    2. 基本类型变量与引用类型变量的区别

    • 基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值
    • 而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。

    从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。有点类似C语言中的指针,但是Java中引用要比指针的操作更简单。

    3. 再谈引用变量

    引用变量通过 = 进行赋值,只是改变了虚拟机栈中所存储的地址,使其指向同一块堆空间中的地址。即只是浅拷贝!

    4. 认识 null

    • null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.
    • 注意: Java 中并没有约定 null 和 0 号地址的内存有任何关联.

    Java数组拷贝的问题

    二维数组

    基本语法

    数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

    二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.

    注意:Java的二维数组不是一定是连续的存储的,所以二维数组不一定是n阶。

  • 相关阅读:
    linux之perf(3)top实时性能
    STM32进行LVGL裸机移植
    视频太长怎么批量分割、提取封面图片的
    Android 压缩字符串 方便二维码传输
    负载均衡的OJ系统
    springboot打包笔记
    《深度学习进阶:自然语言处理》读书笔记:第2章 自然语言和单词的分布式表示
    计算机网络【CN】子网划分与子网掩码
    java从入门到进阶
    基于JAVA花田音乐网站计算机毕业设计源码+数据库+lw文档+系统+部署
  • 原文地址:https://blog.csdn.net/zxj20041003/article/details/132962885