Java基础教程带你走进java的世界

Posted OIqng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础教程带你走进java的世界相关的知识,希望对你有一定的参考价值。

Java教程

Java简介

什么是Java?

Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。

Java分为三个体系:

JavaSE(J2SE,Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE,Java 2 Platform Enterprise Edition,java平台企业版)
JavaME(J2ME,Java 2 Platform Micro Edition,java平台微型版)。

Java的主要特性

  • Java语言是简单的

    Java丢弃了C++中令人难以理解的指针、多继承等概念,使得开发者不需要担忧内存管理。

  • Java语言是面向对象的

    面向对象(Object Oriented):将相关数据和方法看做一个整体。
    面向过程(Process Oriented):已过程为中心的编程思想。

  • Java语言是分布式的

    Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

  • Java语言是健壮的

    Java的强类型机制、异常处理、垃圾的自动收集等为Java程序健壮性提供了重要保证。

  • Java语言是安全的

    Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

  • Java语言是体系结构中立的

    Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

  • Java语言是可移植的

    Java时跨平台的,已编译的Java程序可以在任何带有JVM的系统上运行。

  • Java语言是解释型的

    Java程序经过Java平台编译为字节码文件(.class文件),然后就可在Java平台的任何系统运行。

  • Java是高性能的

    Java不仅可以解释执行还可以编译执行。
    解释执行:我们编写的代码通过javac编译器编译产生字节码(bytecode)文件,JVM的解释器将字节码转换为机器码,运行效率较低。
    编译执行:Hotspot JVM提供的动态编译器JIT(Just-In-Time)编译器能够运行时将代码编译为机器码,运行效率较高。

  • Java语言是多线程的

    在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子类将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

  • Java语言是动态的

    Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

Java开发环境

Oracle 提供了Java的两种环境

  • JDK(Java Development Kit,Java开发标准开发工具包)
  • JRE(Java Runtime Environment,Java运行环境)

JDK

整个Java的核心,包括了Java运行环境(JRE),一些Java工具和Java的核心类库(Java API)。

来自网站https://docs.oracle.com/javase/8/docs/的Java概念图

点击Description of Java Conceptual Diagram跳转到Java概念图描述
附:Java SE Development Kit 8 Documentation Download

JRE

JRE是个运行环境,因此运行Java程序时需要JRE。而JDK里面包含了JRE,因此只需安装JDK即可。

Java基础语句

类、对象、方法和实例变量的概念

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

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

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

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

基本语法

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

Java 标识符

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

关于 Java 标识符,有以下几点需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 关键字不能用作标识符
  • 标识符是大小写敏感的
  • 合法标识符举例:age、$salary、_value、__1_value
  • 非法标识符举例:123abc、-salary

Java修饰符

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

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

Java 变量

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

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

Java 数组

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

Java 关键字

这些Java 关键字不能用于常量、变量、和任何标识符的名称。

类别关键字说明
访问控制private
protected
public
default
私有的
受保护的
公共的
默认
类、方法和变量修饰符abstract
class
extends
final
implements
interface
native
new
static
strictfp
synchronized
transient
volatile
声明抽象

扩充,继承
最终值,不可改变的
实现(接口)
接口
本地,原生方法(非 Java 实现)
新,创建
静态
严格,精准
线程,同步
短暂
易失
程序控制语句break
case
switch
continue
default
do
else
for
if
instanceof
return
switch
while
跳出循环
定义一个值以供
选择
继续
默认
运行
否则
循环
如果
实例
返回
根据值选择执行
循环
错误处理assert
catch
finally
throw
throws
try
断言表达式是否为真
捕捉异常
有没有异常都执行
抛出一个异常对象
声明一个异常可能被抛出
捕获异常
包相关import
package
引入
基本类型boolean
byte
char
double
float
int
long
short
布尔型
字节型
字符型
双精度浮点
单精度浮点
整型
长整型
短整型
变量引用super
this
void
父类,超类
本类
无返回值
保留关键字goto
const
null
是关键字,但不能使用
是关键字,但不能使用

Java注释

单行注释

// 这是单行注释

多行注释

/* 这
是多
行注释 */

继承

在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。

利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。

接口

在 Java 中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。

接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。

Java 源程序与编译型运行区别

如下图所示:

Java 对象和类

Java作为一种面向对象语言。支持以下基本概念:

  • 多态
  • 继承
  • 封装
  • 抽象
  • 对象
  • 实例
  • 方法
  • 重载

对象和类的概念:

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

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

下图的两个男孩同属于一个类(class)即男孩,而这两个男孩分别属于不同的个体即对象(object)。


Java中的类的定义

public class Car {
    // 车的属性
    String color;
    String speed;
    String brand;
    // 车的方法
    public void turn() {

    }
    public void brake() {

    }
    public void fire() {
        
    }
}

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

public class Puppy{
    public Puppy(){
    }
 
    public Puppy(String name){
        // 这个构造器仅有一个参数:name
    }
}

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
public class Car {
    public Car(String brand) {
        System.out.println("车的品牌是:" + brand);
    }
    public static void main(String[] args) {
        Car myCar = new Car("BMW");
    }
}

运行效果

访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法

/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
public class Car {
    String carColor;
    public Car(String brand) {
        System.out.println("车的品牌是:" + brand);
    }
    public void selectColor(String color) {
        carColor = color;
    }
    public String getColor() {
        System.out.println("车的颜色:" + carColor);
        return carColor;
    }
    public static void main(String[] args) {
        Car myCar = new Car("BMW");
        myCar.selectColor("Quantum blue");
        myCar.getColor();
    }
}

运行效果

源文件声明规则

  • 一个源文件中只能有一个 public 类
  • 一个源文件可以有多个非 public 类
  • 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是
    Employee,那么源文件应该命名为Employee.java。
  • 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
  • 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import语句应该在源文件中最前面。
  • import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

Java 包

包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

import 语句

在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类

import java.io.*;

Java基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

Java 语言中的数据类型可以分为以下两大类

  • 基本数据类型
  • 引用数据类型

基本数据类型

  • 整数型

    byte 字节, 1 byte = 8 bits,默认值为0;
    short 占用2个字节(16位),1 short = 16 bits,默认值为0;
    int 占用4个字节(32位),1 int = 32 bits,默认值为0;
    long 占用8个字节(64位),1 long = 64 bits,默认值为0L;

  • 浮点型

    float (单精度浮点数),占用4个字节(32位),1 float = 32 bits,默认值为0.0f;
    double (双精度浮点数), 占用8个字节(64位),1 double = 64 bits,默认值为0.0d;

  • 字符型

    char类型是一个单一的16位Unicode字符,最小值为 \\u0000(0),最大值是 \\uffff(65536),char类型可以存储任何字符,如:char letter = ‘A’;

  • 布尔型

    boolean只有两种值:true 和 false,占用1位,默认值为 false。

基本类型值的范围

public class BaseType {
    public static void main(String[] args) {
        // byte
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
        System.out.println("包装类:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println();

        // short
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
        System.out.println("包装类:java.lang.Short");
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
        System.out.println();

        // int
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
        System.out.println("包装类:java.lang.Integer");
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
        System.out.println();

        // long
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
        System.out.println("包装类:java.lang.Long");
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
        System.out.println();

        // float
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
        System.out.println("包装类:java.lang.Float");
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
        System.out.println();

        // double
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
        System.out.println("包装类:java.lang.Double");
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
        System.out.println();

        // char
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
        System.out.println("包装类:java.lang.Character");

        // 以数值形式而不是字符形式
        System.out.println("最小值:Character.MIN_VALUE="
                + (int) Character.MIN_VALUE);

        // 以数值形式而不是字符形式
        System.out.println("最大值:Character.MAX_VALUE="
                + (int) Character.MAX_VALUE);
    }
}

输出结果如下

引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。变量一旦声明后,类型就不能被改变了。

  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用任何与之兼容的类型。

Java 常量

常量在程序运行时是不能被修改的。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

final double PI = 3.14;

Java语言的转义字符

符号字符含义
\\n换行 (0x0a)
\\r回车 (0x0d)
\\f换页符(0x0c)
\\b退格 (0x08)
\\0空字符 (0x0)
\\s空格 (0x20)
\\t制表符
"双引号
单引号
\\反斜杠
\\ddd八进制字符 (ddd)
\\uxxxx16进制Unicode字符 (xxxx)

自动类型转换

低 ——> 高
byte,short,char—> int —> long—> float —> double

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。

  • 不能把对象类型转换成不相关类的对象。

  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 转换过程中可能导致溢出或损失精度,例如:

int i =128;
byte b = (byte)i;

因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:

(int)23.7 == 23;
(int)-45.89f == -45

自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

public class AutomaticTransaction {
    public static void main(String[] args) {
        char c1='a';//定义一个char类型
        int i1 = c1;//char自动类型转换为int
        System.out.println("char自动类型转换为int后的值等于"+i1);
        char c2 = 'A';//定义一个char类型
        int i2 = c2+1;//char 类型和 int 类型计算
        System.out.println("char类型和int计算后的值等于"+i2);    }
}

运行结果为

强制类型转换

  • 条件是转换的数据类型必须是兼容的。
  • 格式:(type)value type是要强制类型转换后的数据类型
public class ConstraintTransaction {
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1; // 强制类型转换为byte
            System.out.println("int强制类型转换为byte后的值等于"+b);
        }
}

运行结果

隐含强制类型转换

  • 整数的默认类型是 int。
  • 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。

Java 变量类型

在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:

type identifier [ = value][, identifier [= value] ...] ;

格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。

Java语言支持的变量类型有:

  • 类变量:独立于方法之外的变量,用 static 修饰。
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 局部变量:类的方法中的变量。
public class Variable{
    static int classVariable=0;    // 类变量
 
    String str="hello";  // 实例变量
 
    public void method(){
 
        int i =0;  // 局部变量
 
    }
}

Java 局部变量

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

实例变量

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用前或者使用后;
  • 访问修饰符可以修饰实例变量;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

类变量(静态变量)

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

Java 修饰符

Java语言提供了很多修饰符,主要分为以下两类:

  • 访问修饰符
  • 非访问修饰符

修饰符用来定义类、方法或者变量,通常放在语句的最前端。

private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
   // 方法体
}

访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

默认访问修饰符-不使用任何关键字

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。

String version = "1.5.1";
boolean processOrder() {
   return true;
}

私有访问修饰符-private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。

声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

public class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}

公有访问修饰符-public

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。

如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

public static void main(String[] args) {
   // ...
}

受保护的访问修饰符-protected

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected
    方法,而不能访问基类实例的protected方法。

protected

以上是关于Java基础教程带你走进java的世界的主要内容,如果未能解决你的问题,请参考以下文章

《微服务零基础入门教程》一步一步,带你走进微服务的世界

2021年零基础带你走进nacos的世界之云服务器下载安装nacos-小白教程,详细到爆了!

基于JDK11的javaSE,带你走进全新的java世界概述

Kotlin教程:走进Kotlin的世界

满满的干货:带你一起走进数据仓库的世界

带你走进webpack世界,成为webpack头号玩家