天天看点

Java快速入门第一节一、Java简介二、Java程序基础

一、Java简介

1、安装JDK

因为Java程序必须运行在JVM之上,所以,我们第一件事情就是安装JDK。搜索JDK 14,确保从Oracle的官网下载最新的稳定版JDK找到Java SE 14的下载链接,下载安装即可。快速下载

设置环境变量

  • 安装完JDK后,需要设置一个JAVA_HOME的环境变量,它指向JDK的安装目录。在Windows下,它是安装目录,类似:C:\Program Files\Java\jdk-14
  • 然后,把JAVA_HOME的bin目录附加到系统环境变量PATH上。在Windows下,它长这样:

    Path=%JAVA_HOME%\bin;<现有的其他路径>

  • 把JAVA_HOME的bin目录添加到PATH中是为了在任意文件夹下都可以运行java。打开命令提示符窗口,输入命令java -version,注意Java和-version有空格,回车,显示jdk版本,即安装成功。如果一切正常,你会看到如下输出:
    Java快速入门第一节一、Java简介二、Java程序基础

如果你看到的版本号不是14,而是12、1.8之类,说明系统存在多个JDK,且默认JDK不是JDK 14,需要把JDK 14提到PATH前面。

JDK

细心的童鞋还可以在JAVA_HOME的bin目录下找到很多可执行文件:

java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
jar:用于把一组.class文件打包成一个.jar文件,便于发布;
javadoc:用于从Java源码中自动提取注释并生成文档;
jdb:Java调试器,用于开发阶段的运行调试。
           

2、第一个Java程序

我们来编写第一个java程序:打开编辑器输入以下代码

public class HelloWorld{
	public class void main(String[] args){
		System.out.println("Hello, world!");
		}
}
           

在一个Java程序中,你总能找到一个类似这样的:

public class Hello {
    ...
}
           

的定义,这个定义被称为class(类),这里的类名是Hello,大小写敏感,class用来定义一个类,public表示这个类是公开的,public、class都是Java的关键字,必须小写,Hello是类的名字,按照习惯,首字母H要大写。而花括号{}中间则是类的定义。

注意到类的定义中,我们定义了一个名为main的方法:

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

方法是可执行的代码块,一个方法除了方法名main,还有用()括起来的方法参数,这里的main方法有一个参数,参数类型是String[],参数名是args,public、static用来修饰方法,这里表示它是一个公开的静态方法,void是方法的返回类型,而花括号{}中间的就是方法的代码。

方法的代码每一行用"; "结束(英文输入状态下的分号哦!),这里只有一行代码,就是:

System.out.println("Hello, world!"); //它用来打印一个字符串到屏幕上。
           

Java规定,某个类定义的public static void main(String[] args)是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。

注意到Java源码的缩进不是必须的,但是用缩进后,格式好看,很容易看出代码块的开始和结束,缩进一般是4个空格或者一个tab。

最后,当我们把代码保存为文件时,文件名必须是Hello World.java,而且文件名也要注意大小写,因为要和我们定义的类名Hello World完全保持一致。

如何运行Java程序

Java源码本质上是一个文本文件,我们需要先用javac把Hello World.java编译成字节码文件Hello World.class,然后,用java命令执行这个字节码文件:

因此,可执行文件javac是编译器,而可执行文件java就是虚拟机。

第一步,在保存Hello World.java的目录下执行命令javac Hello World.java:
javac Hello World.java
如果源代码无误,上述命令不会有任何输出,而当前目录下会产生一个Hello World.class文件:
ls(列表命令)
Hello World.class	Hello World.java

第二步,执行Hello World.class,使用命令java Hello World:
java Hello World
Hello, world!
注意:给虚拟机传递的参数Hello World是我们定义的类名,虚拟机自动查找对应的class文件并执行。

有一些童鞋可能知道,直接运行java Hello.java也是可以的:
java Hello World.java 
Hello, world!
这是Java 11新增的一个功能,它可以直接运行一个单文件源码!

慢慢的我们会发现,绝大多数情况下,我们无法直接运行一个Java源码文件,原因是它需要依赖其他的库。
           

3、使用IDE

IDE是集成开发环境:Integrated Development Environment的缩写。

使用IDE的好处在于按,可以把编写代码、组织项目、编译、运行、调试等放到一个环境中运行,能极大地提高开发效率。

IDE提升开发效率主要靠以下几点:

  • 编辑器的自动提示,可以大大提高敲代码的速度;
  • 代码修改后可以自动重新编译,并直接运行;
  • 可以方便地进行断点调试。

目前,流行的用于Java开发的IDE有:

Eclipse

Eclipse是由IBM开发并捐赠给开源社区的一个IDE,也是目前应用最广泛的IDE。Eclipse的特点是它本身是Java开发的,并且基于插件结构,即使是对Java开发的支持也是通过插件JDT实现的。

除了用于Java开发,Eclipse配合插件也可以作为C/C++开发环境、PHP开发环境、Rust开发环境等。

IntelliJ Idea

IntelliJ Idea是由JetBrains公司开发的一个功能强大的IDE,分为免费版和商用付费版。JetBrains公司的IDE平台也是基于IDE平台+语言插件的模式,支持Python开发环境、Ruby开发环境、PHP开发环境等,这些开发环境也分为免费版和付费版。

在我初学 Java 的时候,老师竟然告诫我们不要使用 IDE(当时是 Eclipse 风靡的年代),而要使用文本编辑工具,比如说 Nodepad++,UE。

老师说的有一定的道理,比如说,在没有代码提醒的帮助下,我们能够通过不停的手敲记住一些 Java 的常见名词。但在我看来也就仅此而已。

没有 IDE 的帮助,让初学者对编程望而生畏,因为那些名词实在是太多了。我们班当时很多同学就是因为觉得太痛苦了,就放弃编程了。

我到现在也不太会敲 extends、implements(在 Eclipse 中复制出来的),不会敲又怎样呢?有好的工具,我们就应该利用,不应该受苦。

在网上,我们能看到很多破解版,这对于资金不是很充足的童鞋们很友好,但我们力所能及的情况下,可要支持正版哦!
           

二、Java程序基础

1、Java程序基本结构

我们先来分析一个java程序,来看看它的结构:

/**
 * 可以用来自动创建文档的注释
 */
public class Hello {
    public static void main(String[] args) {
        // 打印输出
        System.out.println("Hello, world!");
        /* 多行注释开始
        注释内容
        注释结束 */
    }
}
           

因为Java是面向对象的语言,一个程序的基本单位就是class,class是关键字,这里定义的class名字就是Hello:

// 类名是Hello
public class Hello {
    // ...
}
           

类名要求:

类名必须以英文字母开头,后接字母,数字和下划线的组合习惯以大写字母开头

要注意遵守命名习惯.

好的类命名:

Hello

NoteBook

VRPlayer

不好的类命名:

hello

Good123

Note_Book

_World

注意到public是访问修饰符,表示该class是公开的。不写public,也能正确编译,但是这个类将无法从命令行执行。在class内部,可以定义若干方法(method):

public class Hello {
    public static void main(String[] args) { // 方法名是main
        // 方法代码...
    } // 方法定义结束
}
           

方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。这里的方法名是main,返回值是void,表示没有任何返回值。

我们注意到public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法,后面我们会讲解方法的类型,目前,我们只需要知道,Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。

方法名也有命名规则,命名和类(class)一样,但是首字母小写:

好的方法命名:

main

goodMorning

playVR

不好的方法命名:

Main

good123

good_morning

_playVR

在方法内部,语句才是真正的执行代码。Java的每一行语句必须以分号结束:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!"); // 语句
    }
}
           

在Java程序中,注释是一种给人阅读的文本,不是程序的一部分,所以编译器会自动忽略注释。

编程江湖中一直盛传着一个段子,那就是要问程序员最讨厌哪 4 件事?那必须是:

<写注释、写文档、别人不写注释、别人不写文档>

Java有3种注释

  • 单行注释,以双斜线开头,直到这一行的结尾结束:
  • 多行注释以/星号开头,以/结束,可以有多行:
  • 特殊的多行注释,以/*开头,以/结束,如果有多行,每行通常以星号开头,这种特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。

Java程序对格式没有明确的要求,多几个空格或者回车不影响程序的正确性(Python除外,那格式要求,试试就知道了),但是我们要养成良好的编程习惯,注意遵守Java社区约定的编码格式。

2、变量和数据类型

变量

在Java中,变量分为两种:基本类型的变量和引用类型的变量。

我们先说基本类型的变量。

在Java中,变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。例如:

int x = 1;
           

上述语句定义了一个整型int类型的变量,名称为x,初始值为1。不写初始值,就相当于给它指定了默认值。默认值总是0。

int x = 100; // 定义int类型变量x,并赋予初始值100
        System.out.println(x); // 打印该变量的值,观察是否为100
        x = 200; // 重新赋值为200
        System.out.println(x); // 打印该变量的值,观察是否为200
           

变量的一个重要特点是可以重新赋值。例如,对变量x,先赋值100,再赋值200。

int a, b, c;         // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22;         // 声明并初始化 z
String s = "runoob";  // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x';        // 声明变量 x 的值是字符 'x'。
           

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

  • 局部变量:类的方法中的变量。
  • 全局(实例)变量:独立于方法之外的变量,不过没有 static 修饰。
  • 类变量:独立于方法之外的变量,用 static 修饰。以后会了解到!

Java 的两大数据类型:

  • 内置数据类型
  • 引用数据类型

内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

int:

  • int 数据类型是32位、有符号的以二进制补码表示的整数;
  • 最小值是 -2,147,483,648(-2^31);
  • 最大值是 2,147,483,647(2^31 - 1);
  • 一般地整型变量默认为 int 类型;
  • 默认值是 0 ;
  • 例子:int a = 100000, int b = -200000。

byte:

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默认值是 0;
  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数
  • 最小值是 -32768(-2^15);
  • 最大值是 32767(2^15 - 1);
  • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
  • 默认值是 0;
  • 例子:short s = 1000,short r = -20000。

long:

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
  • 最小值是 -9,223,372,036,854,775,808(-2^63);
  • 最大值是 9,223,372,036,854,775,807(2^63 -1);
  • 这种类型主要使用在需要比较大整数的系统上;
  • 默认值是 0L;
  • 例子: long a = 100000L,Long b = -200000L。
  • Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析:
  • "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

float:

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  • float 在储存大型浮点数组的时候可节省内存空间;
  • 默认值是 0.0f;
  • 浮点数不能用来表示精确的值,如货币;
  • 例子:float f1 = 234.5f。

double:

  • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
  • 浮点数的默认类型为double类型;
  • double类型同样不能表示精确的值,如货币;
  • 默认值是 0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean数据类型表示一位的信息;
  • 只有两个取值:true 和 false;
  • 这种类型只作为一种标志来记录 true/false 情况;
  • 默认值是 false;
  • 例子:boolean one = true。

char:

  • char类型是一个单一的 16 位 Unicode 字符;
  • 最小值是 \u0000(即为0);
  • 最大值是 \uffff(即为65,535);
  • char 数据类型可以储存任何字符;
  • char a = ‘S’; char 后面赋值要用单引号,因为是字符型数据类型
  • String a = “I AM FINE”; String 后面赋值要用双引号,因为是字符串数据类型

对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。

引用类型

  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用任何与之兼容的类型。
  • 例子:Site site = new Site(“Runoob”)

Java 常量

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

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

final double P = 3.1415927; //以后会用到的
           

自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

低 ------------------------------------> 高

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

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

  • 不能对boolean类型进行类型转换。
  • 不能把对象类型转换成不相关类的对象。
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  • 转换过程中可能导致溢出或损失精度。
  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

强制类型转换

  • 条件是转换的数据类型必须是兼容的。
  • 格式:(type)value type是要强制类型转换后的数据类型
byte b = (byte)i;//强制类型转换为byte
           

3、Java运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

  • 算术运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 其他运算符

算术运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。

表格中的实例假设整数变量A的值为10,变量B的值为20:

Java快速入门第一节一、Java简介二、Java程序基础

自增自减运算符

  • 自增(++)自减(- -)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
  • 前缀自增自减法(++a,- -a): 先进行自增或者自减运算,再进行表达式运算。
  • 后缀自增自减法(a++,a- -): 先进行表达式运算,再进行自增或者自减运算。

关系运算符

下表为Java支持的关系运算符:表格中的实例整数变量A的值为10,变量B的值为20

Java快速入门第一节一、Java简介二、Java程序基础

位运算符

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

下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:

Java快速入门第一节一、Java简介二、Java程序基础

逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假

Java快速入门第一节一、Java简介二、Java程序基础
& 和 &&、| 和 || 的区别
区别 1: & 和 | 可以进行位运算,后者不能。
区别 2: && 和 || 进行运算时有短路性,前者无。
           

赋值运算符

下面是Java语言支持的赋值运算符:

Java快速入门第一节一、Java简介二、Java程序基础

条件运算符(?:)

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

4、Java修饰符

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

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

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

访问控制修饰符

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

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
  • public : 对所有类可见。使用对象:类、接口、变量、方法。
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
助记:整个世界都打包成一块,同时划分为四个层次: 联合国(public)【其他包】、国家(protected)【继承子孙】、洲际(default)【同一包】、个人(private)【当前类】。

联合国制定规则所有人都可以用,国家制定的只有在国家内可以用,各联邦洲因地制宜有制定当地民法,个人制定的就给个人使用。
           

非访问修饰符

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。

  • static 修饰符,用来修饰类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronized 和 volatile 修饰符,主要用于线程的编程

最后:超哥带你学编程,记录自己的每一步!

关注微信公众号,获取更多学习资源!!!

Java快速入门第一节一、Java简介二、Java程序基础