Java入门(一)
Elora Rinta!

JDK、JRE、JVM

JDK:Java Development Kit,包含了JRE和JVM,扩充了开发工具

JRE:Java Runtime Environment,运行环境

JVM:Java Virtual Machine,可以用软件或硬件来实现,模拟了一个小巧的CPU处理JAVA。跨平台的核心,屏蔽底层系统的差别。

Hello World

  1. 新建一个Java文件,文件的后缀名为.java,如Helloworld.java

  2. 输入代码

    1
    2
    3
    4
    5
    public class Helloworld{
    public static void main(String[] args){ // 程序通过mai方法执行
    System.out.print("Hello,world!");
    }
    }
  3. 在控制台输入命令进行编译

    1
    javac Helloworld.java #编译成功控制台不输出消息,会在文件夹里生成一个Helloworld类

  4. 在控制台输入命令运行类

    1
    java Helloworld #输出结果会在控制台中显示


注意

  • Java是大小写敏感的。

  • 所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

  • 类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass

  • 源文件名和代码里的类名必须保持一致,且首字母大写

  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

Java基础语法

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

:类是一个模板,它描述一类对象的行为和状态。

方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。

实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

Java程序运行机制

Java既有编译型(Complie)的特点,又有解释型(Interpret)的特点。.java的源文件经过Java编译器成为.class文件。.class文件放入虚拟机的类装载器中,类加载进JVM。字节码校验器会检查代码是否出错,最后解释器会将代码解释给操作系统平台。先编译,再解释

注释

注释并不会被执行

  • 单行注释:

    1
    // 这是单行注释
  • 多行注释:

    1
    2
    3
    /*
    这是多行注释
    */
  • JavaDoc文档注释:

    1
    2
    3
    4
    /**
    * @Description Helloworld
    * @Author Rinta
    */

标识符

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

Java中的关键字:


注意:

  • 所有的标识符应该以字母(A-Z或a-z),美元符($),或下划线(_)开始
  • 首字母之后可以是字母(A-Z或a-z),美元符($),下划线(_)或数字的随意组合
  • 不能使用关键字作为变量名或方法名
  • 标识符大小写敏感
  • 可以使用中文命名,不建议

Java修饰符

Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

  • 访问控制修饰符 : default, public , protected, private
  • 非访问控制修饰符 : final, abstract, static, synchronized

数据类型

Java是强类型语言,要求变量的使用严格符合规定,所有变量必须先定义后才能使用,

基本类型(primitive type)

  • 数值类型

    • 整数类型

      • byte 一个字节范围:-128 - 127

      • short 两个字节范围:-32768 - 32767

      • int 四个字节范围:-2147483648 - 2147483647

      • long 八个字节范围:-9223372036854775808 - 9223372036854775807

        在数字后面加L,如:long num1 = 12344321L;

    • 浮点类型

      • float 占4个字节

        在数字后面要加F,如:float num2 = 22.3f;

      • double 占8个字节

    • 字符类型

      • char 占2个字节
  • boolean类型:占1位,值只有true和false

类型转换

转换的从低到高为:byte,short,char—> int —>long—>float—>double,低(范围)向高转换是自动转换,高到低要强制转换

注意:

  • 不能对布尔值进行转换
  • 不能把对象类型转换成不相干的类型
  • 高到低要用到强制转换
  • 转换的时候可能存在内存溢出,或者精度问题

引用类型(reference type)

  • 接口
  • 数组

拓展

  • 整数拓展

    • 二进制:0b,八进制:0,十六进制:0x
  • 浮点数拓展

    • eg. 银行业务怎么表示?BigDecimal 数学工具类

最好完全避免用浮点数进行比较

  • 字符类拓展

    • 所有的字符本质上是数字,Unicode编码,从U0000到UFFFF
    • \u 转义字符表示
  • 布尔值拓展

    • boolean flag = true;
      if(falg){}
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32




      # 变量

      每个变量必须声明其类型,Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域。

      Java 中主要有如下几种类型的变量

      - 局部变量
      - 类变量(静态变量)
      - 成员变量(非静态变量)

      **注意:**

      - 每个变量都有类型,可以是基本类型,也可以是引用类型
      - 变量名必须是合法的标识符
      - 变量声明是一条完整的语句,分号结束

      ## 变量作用域



      ```java
      public class Variable(
      static int allClicks = 0; // 类变量
      String str = "hello world"; // 实例变量
      public void method(){
      int i = 0; // 局部变量
      }
      )
  • 类变量

    关键词:static,从属于类

    • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外
    • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
    • 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变
    • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
    • 静态变量在第一次被访问时创建,在程序结束时销毁。
    • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
    • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
    • 静态变量可以通过:ClassName.VariableName的方式访问。
    • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
  • 实例变量

    独立于方法之外的变量,类的里面,从属于对象

    • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;

    • 当一个对象被实例化之后,每个实例变量的值就跟着确定;

    • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;

    • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;

    • 实例变量可以声明在使用前或者使用后;

    • 访问修饰符可以修饰实例变量;

    • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;

    • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

    • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

  • 局部变量

    类的方法中的变量,必须声明和初始化值。

    • 局部变量声明在方法、构造方法或者语句块中;
    • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
    • 访问修饰符不能用于局部变量;
    • 局部变量只在声明它的方法、构造方法或者语句块中可见
    • 局部变量是在栈上分配的。
    • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

Java数组

数组是储存在堆上的对象,可以保存多个同类型变量。

Java枚举

Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。

常量

初始化后不能再改变值

1
2
// final 常量名=值;
final double PI=3.14

Java运算符

关系运算符

操作符 描述 例子(A=10,B=20)
+ 加法 - 相加运算符两侧的值 A + B 等于 30
- 减法 - 左操作数减去右操作数 A – B 等于 -10
* 乘法 - 相乘操作符两侧的值 A * B等于200
/ 除法 - 左操作数除以右操作数 B / A等于2
取余 - 左操作数除以右操作数的余数 B%A等于0
++ 自增: 操作数的值增加1 B++ 或 ++B 等于 21
自减: 操作数的值减少1 B– 或 –B 等于 19
  • 前缀自增自减法(++a,–a):先进行自增或自减运算,再进行表达式运算。
  • 后缀自增自减法(a++,a–):先进性表达式运算,再进行自增或自减运算。

关系运算符

运算符 描述 例子(A=10,B=20)
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)为假。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。

位运算符

位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。


1
2
3
4
5
6
7
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
操作符 描述 例子(A=60,B=13)
如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
| 如果相对应位都是 0,则结果为 0,否则为 1 (A | B)得到61,即 0011 1101
^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 (〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了

赋值运算符

操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
+ = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
- = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C - A
* = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
/ = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A,C 与 A 同类型时等价于 C = C / A
(%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
<< = 左移位赋值运算符 C << = 2等价于C = C << 2
>> = 右移位赋值运算符 C >> = 2等价于C = C >> 2
&= 按位与赋值运算符 C&= 2等价于C = C&2
^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
| = 按位或赋值操作符 C | = 2等价于C = C | 2

条件运算符(?:)

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

1
variable x = (expression) ? value if true : value if false

intanceof运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)

1
( Object reference variable ) instanceof  (class/interface type)

如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

1
2
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

如果被比较的对象兼容于右侧类型,该运算符仍然返回true。

1
2
3
4
5
6
7
8
9
class Vehicle {}

public class Car extends Vehicle {
public static void main(String[] args){
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println(result);
}
}

Java运算符优先级

类别 操作符 关联性
后缀 () [] . (点操作符) 左到右
一元 expr++ expr– 从左到右
一元 ++expr –expr + - ~ ! 从右到左
乘性 * /% 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 > >= < <= 左到右
相等 == != 左到右
按位与 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 | | 左到右
条件 ?: 从右到左
赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
逗号 左到右

包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类的命名空间。

  • 语法格式:

    1
    2
    package pkg1[. pkg2[. pkg3...]];

  • 一般利用公司域名倒置作为包名

  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用import语句可完成此功能。

    1
    import package1[.package2...].(classname|*)

    *是通配符,会导入这个包下所有的类

JavaDoc

  • javadoc命令是用来生成自己API文档的,可以将一种自定的注释信息生成帮助文档

  • 参数信息

    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
  • 可以加在类或方法上面

  • 可以在命令行输入代码生成doc文件

    1
    javadoc -encoding UTF-8 -charset UTF-8 Doc.java
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
This site is deployed on
Total words 75.1k Unique Visitor Page View