JAVA入门笔记1 —— 基础概念和基础语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA入门笔记1 —— 基础概念和基础语法相关的知识,希望对你有一定的参考价值。


  • 参考书:《Java语言程序设计与数据结构(基础篇)》—— 梁勇

文章目录

  • ​​一、基础概念​​
  • ​​1. Java语言规范、JDK、JRE、JVM、IDE​​
  • ​​2. Java的加载与执行​​
  • ​​3. java中的源文件名、类名和main方法​​
  • ​​4. 关于packet​​
  • ​​二、基础语法规范​​
  • ​​1. java中的标识符​​
  • ​​2. 良好的命名习惯​​
  • ​​3. 变量​​
  • ​​(1)java支持的数据类型​​
  • ​​(2)显式表示数据类型​​
  • ​​4. 常量​​
  • ​​三、基础操作​​
  • ​​1. 用Scanner从控制台读取输入​​
  • ​​2. 向控制台输出​​
  • ​​3. 基本运算​​
  • ​​4. 类型转换​​
  • ​​5. 赋值语句​​

一、基础概念

1. Java语言规范、JDK、JRE、JVM、IDE

  1. Java语言规范:是对Java语言语法和语义的技术定义
  2. Java的三个版本
  • J2SE/JavaSE【Java的标准版本】
  • 基础,无论是以后走EE还是ME,SE是必须要精通的。
  • J2SE是SUN公司为java程序员准备的一套“基础类库”,这套基础类库学习之后,可以完成最基本的操作
  • 例如,文件的读写、线程的控制…
  • J2EE/JavaEE【Java的企业版本】
  • 这是SUN公司为程序员专门准备的一套“类库”,这套类库可以协助程序员完成企业级软件的开发
  • 企业级软件:OA办公系统、进销存系统、超市系统…
  • J2ME/JavaME【Java的微型版本】
  • 这是SUN公司为java程序员专门准备的另一套“类库”,这套类库可以协助程序员完成微型设备的嵌入式开发,
  • Java最初就是做微型设备嵌入式开发的。
  1. JDK(Java开发工具包):JDK由一组程序组成,由Oracle配合每个Java版本提供,包括编译器、调试器和其它工具。每个程序都是从命令行调用的,用于编译、运行和测试Java程序
  2. JRE(Java的运行时环境):运行Java程序的程序。它包括Java虚拟机JVM、Java核心类库和支持文件。
  3. JVM(Java虚拟机):JVM是一个解释Java字节码的程序。​​.java​​后缀的java源文件经过编译成为​​.class​​后缀的java字节码文件,这可以用JVM解释执行。在不同的平台上有不同的JVM,他们都能解释​​.class​​文件,这就实现了跨平台特性,即 “一次编译,到处执行”
  4. IDE(集成开发环境):一个图形界面软件,把程序编辑、编译、构建、调试等集中在一起,便于快速开发程序。如Eclipse、NetBeans等

2. Java的加载与执行

  1. 程序员在​​xxx.java​​文件中编写源代码,源代码必须符合java的语法,这些源代码就是高级语言。存放源代码的文件被称为Java源文件
  2. 使用JDK中自带的javac.exe命令对以上的java源程序进行编译。DOS命令:​​javac 源文件路径​​。如果语法没问题,编译通过,生成字节码文件​xxx.class​
  • 源文件路径可以是绝对路径,也可以是相对路径。
  • 编译之后,其实java源文件删除不会影响程序的执行。
  • 最好不要将java源文件删除,因为程序最终运行效果不是预期效果的时候,需要重新修改java源代码,然后进行重新编译生成全新的class字节码文件,再重新运行字节码程序。
  1. 在一个安装了JVM的平台上,利用java.exe命令解释运行java字节码。DOS命令:​​java 类名​
  • 这个类名是源文件中public class的名字
  • 以上程序的执行原理:
  • java.exe命令执行会启动JVM
  • JVM启动之后,马上启动“类加载器-Class Loader”
  • ClassLoader负责去硬盘的“某个位置”上搜索“类名.class”字节码文件。
  • 找不到这个.class文件,一定会出现程序异常现象。
  • 找到了这个.class文件之后将.class文件转换成"二进制",操作系统可以直接识别二进制,操作系统执行二进制码和底层的硬件平台进行交互。

3. java中的源文件名、类名和main方法

  1. 一个java源文件当中可以定义多个class
  2. 一个java源文件当中public的class不是必须的
  3. 一个class定义在编译后生成一个xxx.class字节码文件(如果一个源文件中定义了多个class,就会生成多个字节码文件)
  4. 一个java源文件中,最多定义一个public class
    • 如果定义了public class,该类名称必须和java源文件名称一致。如果此源文件中有​​main​​方法,也必须放在这个​​public class​​里
    • 如果没有定义​​public class​​,则不必要求类名和源文件同名。如果有main方法,可以任意放在某个类中
  5. main方法是程序的入口,每一个class当中都可以编写main方法
    • 想执行X.class当中的main方法:​​java X​
    • 如果执行命令​​java X​​,而​​X.class​​中没有main方法,会出现运行阶段的错误。
    • 同一个java源文件的不同类中可以包含多个main方法。当JVM进行编译时,会提示选择其中一个main方法作为编译的入口。

4. 关于packet

  1. 包PACKET 就是一个文件夹,包下的CLASS互相访问如一个文件。
  2. java 编译器在编译时,直接根据package指定的信息直接将生成的class 文件生成到对应目录下。例如package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 /aaa/bbb/ccc/ 这个目录下。
  3. 可以把Java中的一个package(包)看成一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起,这个名称空间就是包名。
  4. 带package的java编译与不带package的java编译
二、基础语法规范

1. java中的标识符

  1. 标识符必须由字母、数字、下划线、美元符号($)组成
  2. 标识符不能以数字开头
  3. 标识符不能是保留字
  4. 标识符不能是true/false/null
  5. 标识符可以是任意长度

2. 良好的命名习惯

  • 变量/方法:小驼峰 carName
  • 类名:大驼峰 CarName
  • 常量:全大写 CAR_NAME

3. 变量

(1)java支持的数据类型

  1. 基本数据类型
  2. JAVA入门笔记1


  3. 引用数据类型:包括​​字符串​​、​​类​​、​​数组​​、​​接口​​、​​Lambda​
  4. 和C/C++不同的一点:​​true​​和​​false​​可以作为结果打印
  5. System.out.println(0>1);   //打印false

(2)显式表示数据类型

  1. 表示二进制:加​​前缀0b​​或​​0B​
  2. 表示十六进制:加​​前缀0x​​或​​0X​
  3. 浮点数加​​后缀f/F​​:指出是float型,如3.0f,float类型赋值时要这样写,否则强转double
  4. 浮点数加​​后缀d/D​​:指出是double型,如3.0d,不加后缀默认也是double
  5. 整数加​​后缀L/l​​:指出是long型,long类型赋值时要这样写,否则强转int

4. 常量

  1. 用​​final​​修饰变量定义语句,类似C中​​const​
  2. final double PI = 3.1415926;
  3. 字面值常量
    1. 整数常量:所有的整数 (0,1, 567, -9)
    2. 小数常量:所有的小数 (0.0, -0.1, 2.55)
    3. 字符常量:单引号引起来,只能写一个字符,必须有内容 (‘a’ , ’ , ‘好’)
    4. 字符串常量:双引号引起来,可以写多个字符,也可以不写 (“A” ,“Hello” ,“你好” ,"")
    5. 布尔常量:只有两个值(true , false)
    6. 空常量:只有一个值(null)
三、基础操作

1. 用Scanner从控制台读取输入

  1. ​System.out​​用来表示标准输出设备;
    ​System.in​​用来表示标准输入设备;

  2. 创建一个​​Scanner​​类对象来读取来自​​System.in​​的输入,如:

    Scanner input = new Scanner(System.in);
  3. Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符,比如空格,回车,tab 等等

  4. Scanner类在​​包java.util​​中

    1. 明确导入:​​import java.util.Scanner​​ (导入java.util包中的Scanner类)
    2. 通配导入:​​import java.util.*​​ (导入java.util包中的所有类)
      • 注意:除非代码中用到了某个类,否则通配导入中的其他类不会在编译运行时被读入,所以性能上没什么区别
  5. Scanner中的方法:

    1. ​.nextByte()​​:返回一个byte数据

    2. ​.nextShort()​​:返回一个Short数据

    3. ​.nextInt()​​:返回一个int数据

    4. ​.nextLong()​​:…

    5. ​.nextFloat()​​:…

    6. ​.nextDouble()​​:…

    7. ​.next()​​:返回一个字符串,读到第一个空白符结束,不读空白符

    8. ​.nextLine()​​:返回一个字符串,读到回车结束,回车也读走,但是返回的字符串中无回车

      注意一下:.next()和.nextLine()的区别

double r = input.nextDouble();

2. 向控制台输出

  1. 四种常见输出形式

    System.out.println(1111);     //换行打印
    System.out.print(1111); //不换行打印
    System.out.write(2222); //字节输出
    System.out.printf("%+8.3f\\n", 3.14);//标准输出
  2. 引用自:Java的常用输入输出语句

    • System.out.println(); 是最常用的输出语句,它会把括号里的内容转换成字符串输出到输出窗口(控制台),并且换行,当输出的是一个基本数据类型时,会自动转换成字符串,如果输出的是一个对象,会自动调用对象的toString();方法,将返回值输出到控制台
    • System.out.print(); 与第一个很相似,区别就是上一个输出后会换行,而这个命令输出后并不换行。
    • System.out.printf(); 这个方法延续了C语言的输出方式,通过格式化文本和参数列表输出
  3. 常见转义字符
  4. JAVA入门笔记1

  5. 标准输出详解

    • 用​​System.out.printf("...");​​进行标准格式输出

    • ​%b​​ - 布尔值
      ​%c​​ - 字符
      ​%d​​ - 十进制整数
      ​%f​​ - 浮点数
      ​%e​​ - 科学计数法
      ​%s​​ - 字符串

    • ​"%n1.n2X"​​指输出宽度至少n1,小数点后保留2位数字,不足则左补空格,超过则自动增加宽度

    • 显示带逗号的数字:在n1前加​​,​

      System.out.printf("%,8d",12345678); //输出12,345,678
    • 设置补充字符:在n1前指定补充字符:

      System.out.printf("%08d",1234);   //输出00001234
    • 对齐:

      • 默认是右对齐
      • 在n1前加一个​​-​​,要求项在指定域是左对齐
      • System.out.printf("%7.2f%6d%-4s", 45.556, 14, "AB");    //__45.56____14AB__ (_是空格)
        System.out.printf(%7.2f%6d%4s", 45.556, 14, "AB"); //__45.56____14__AB (_是空格)

3. 基本运算

  1. 四则运算:​​+​​、​​-​​、​​*​​、​​/​​、​​%​​、​​+=​​、​​-=​​、​​*=​​、​​/=​​、​​%=​​、​​++(分前后)​​、​​--(分前后)​​ 和C的特性一样
    1. 其中对负数进行​​%​​计算,相当于对正数用%再取负数
    2. 整形进行​​/​​运算,舍去小数部分
  2. 比较运算:​​==​​、​​!=​​、​​<​​、​​>​​、​​>=​​、​​<=​​ 和C的特性一样
  3. 逻辑运算:​​&&​​、​​||​​、​​!​​ 和C的特性一样
  4. 三元运算符:​​布尔表达式 ? 结果1:结果2​​ 和C的特性一样
  5. 其他数学运算:JAVA API中的​​Math类​​提供了更多数学运算,如用​​Math.pow(a,b)​​计算a的b次方。​​Math​​类属于​​java.lang​​,可以不import直接用

4. 类型转换

  1. Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换,将取值范围小的类型转为取值范围大的类型byte/short/char -> int -> long -> float -> double​:

    double y = 3/4.0; //自动转为 3.0/4.0

    int x = 3
    double z = x*4.5; //自动转为 3.0*4.5
  2. 强制类型转换:

    • 通过在括号中给出目标类型实现强制类型转换
    • (int)1.7 == 1 
      (double)1/2 == 1.0/2 == 0.5
    1. ​boolean​​和​​int​​不能强制类型转换(会报错)
  3. 隐式强制类型转换: 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过表示范围,那么javac编译器会自动(在.class文件中)隐含地补上​(byte)/(short)/(char)​;如果右侧赋值的数值超过了表示范围,编译器报错

    char a = 65;  // 正确:等价与char a = (char)65;
    short s = 1; // 正确:等价于short s = (short)1;
  4. 编译器的常量优化:在给变量赋值时,如果右边全是常量没有变量,编译器会直接将若干常量表达式计算得到结果。也就是说编译时即执行运算,提升了运行效率。这个优化也会配合上面一条起作用。

    short a = 5;
    short b = 8;
    short c = a + b; //这里右边自动转换为int+int,再赋值时会报错

    short res = 5 + 8; //正确:等价于short res = 13;
    short res = 5 + res ; //报错,右边没有常量优化了,右边自动转int型
  5. 利用类型转换进行四舍五入:

    1. 四舍五入到整数:​​(int)(x+0.5)​
    2. 向上四舍五入保留两位:​​(int)(x*100+0.5)/100.0​
    3. 向下四舍五入保留两位:​​(int)(x*100)/100.0​

5. 赋值语句

  1. 赋值时必须数据类型一致,不能自动类型转换

  2. 特殊的赋值

    //以下两种写法等价
    System.out.println(x=1); // 1

    x = 1 // 2
    System.out.println(x);

    //以下两种写法等价
    i = j = k = 1; // 1

    k = 1 // 2
    j = k
    i = j

    //赋值时不会自动类型转换,只能强转
    int a = 1.5; //欲把double赋值给int报错
    int a = (int)1.5; //a赋值为1

    short s = 1;
    s = s+1; //等号右边自动转换为int型,欲把int赋值给short,报错
    s = (short)(s+1); //赋值成功




以上是关于JAVA入门笔记1 —— 基础概念和基础语法的主要内容,如果未能解决你的问题,请参考以下文章

scala快速入门之基础篇-循环语法

java 课程大纲

Java基础语法入门

Java基础学习笔记八 Java基础语法之接口和多态

Java基础学习笔记七 Java基础语法之继承和抽象类

java学习笔记之基础语法