Skip to content

Java基础

入门

  • java特点

    特点说明
    面向对象/
    多线程同一时间可处理多个任务
    编译/解释混合性语言先编译成class文件,再交给设备按行去解释
    跨平台java代码是运行在虚拟机中而非操作系统,针对不同操作系统安装不同的虚拟机即可
  • java版本类别

    版本介绍
    java SEjava标准版,提供基本服务和api,适用开发桌面程序,为java另外两个版本的基础。
    java EEjava企业版,提供企业级应用开发的完整解决方案,适用开发大型企业级应用或网站。
    java MEjava小型版,适用于嵌入式设备(如电视机,相机)和小型移动设备(如很早之前塞班系统的手机软件),该版本基本已被淘汰。
  • java jdk版本中8广泛应用于传统老项目,稳定性高。17适合使用新特性或微服务的新项目,是最新长期支持的版本。17版本安装后会自动配置环境变量。

  • java代码文件都以.java为后缀(注意代码行都必须以;结尾)。通过调用javac java文件名来编译java文件为class文件,再通过调用java class文件名(不含后缀)来运行代码。

    注意:java文件名需要跟文件内部的public class名一致,否则运行会报错。

  • JDK/JRE/JVM关系

    名词介绍
    JDKJDK是java开发工具包,包含了JVM虚拟机,核心类库和开发工具(java,javac等)。用于编写代码+运行程序。
    JREJRE是java运行环境。包含了JVM虚拟机,核心类库和运行工具。如果只需要运行class文件,则只需要JRE即可。
    JVMJVM是虚拟机,为java程序真正运行的地方。

数据类型/类型转换

基本类型

数据类型.png

拓展

  • 一般来说,整数类型变量默认使用int(取值范围大且常用),小数类型默认使用double(比float取值范围更大,精度更高)
  • char只能表示单个字符,如单个字母/符号/汉字,且值必须使用单引号。如char name = 'a'
  • 使用String来表示字符串且值必须使用双引号,如String name="胡八一"
  • 定义long类型变量时,值后面需要加一个L(可小写),如long n = 9999999999L
  • 定义float类型变量时,值后面需要加一个F(可小写),如foat k = 343.545464F
  • 数字取值范围从大到小:dobule > float > long > int > short > byte

类型转换


隐式转换

  1. 取值范围小的类型值会在运算过程中的会被提升为取值范围大的
java
int a = 10;
double b = a; //注意这里是把int赋值给了double变量,只能把取值范围小的类型值赋值给取值范围大的。
System.out.println(b); //10.0
java
long a =1L;
int b=2;
double c=3.0;
double d=a+b+c; //这里类型必须为double
  1. 运算时存在byte,short,char这三种类型,会先提升对应类型为int类型(此规则比第1条规则优先级更高)。
java
byte a=1;
byte b=2;
// byte c=a+b; //类型错误
int c=a+b; //类型正确
java
byte a =1;
short b =2;
int c = a+b; //注意这里c是int类型,而不是根据取值范围大小排序判断为short类型
  1. 加法运算时存在字符串则会进行字符串拼接操作。如果是连续加法,则从左往右执行。
java
System.out.println( "中" + "abc" + 1); //中abc1

System.out.println("中" + "abc" + true); //中abctrue

System.out.println(1 + 2 + "abc"+ 1 + 2); //3abc12

注意

此项规则只适用于字符串,不适用于单个字符

  1. 当字符和字符或数字进行加法运算时,会将字符转成对应的ASCII码的数字再进行计算(这条规则实际是第2条规则的补充)
java
System.out.println('a'+1); //98(a的ascII码数字为97)

System.out.println('a'+"abc"); //aabc(因为存在字符串,所以应用第3条规则)

强制转换

用于把取值范围大的类型值赋值给取值范围小的类型变量.

java
byte a=1;
byte b=2;
byte c=(byte)(a+b); //a+b本身应该为int类型,需要强制转换才能变成byte类型

补充

  • 只含整数的运算,其结果必然是整数;存在小数的运算,其结果只能是小数。

    java
     System.out.println(5 / 2); //2
     System.out.println(6.0 / 2); //3.0
     System.out.println(6.0 / 2.0); //3.0
     System.out.println(6 / 2); //3
     System.out.println(5 / 2.5); //2.0
  • +=,-=,*=,/=等赋值运算符会根据被赋值变量类型进行内部强制转换

    java
      short a = 1;
      a+=1; //这里等价于a = (short)(a+1)。虽然按以往规则a=a+1时a会被提升为int类型,但赋值运算符是特殊情况。

数组

  • 数组的长度在定义时就已确定
java
//写法1(动态初始化)
int[] arr = new int[5]; //定义一个长度为5的int数组,并未初始化值
// 默认初始化值根据类型确定,如int为0,double为0.0,boolean为false,char为'\u0000'(空字符)

//写法2(静态初始化)
int[] arr = {1,2,3,4,5}; //定义一个长度为5的int数组,并定义好各自的值

其他

  • java内存分配:堆内存(new出来的对象,如数组和对象);栈内存(基本数据类型和用于函数运行时);方法区(存放可运行的class文件)

MIT Licensed