Java相关

什么是Java

Java可以理解为编程语言或者开发工具。
Java最终的目的是用于编写直接在机器上运行的程序。
与HTML运行于浏览器,SQL运行于数据库系统对比,Java能做的事情更多,更加的普遍。
对于跨平台的理解:为了让平台对编程人员透明,写出可以在不同平台运行的相同源代码,Java开发出了JVM(Java虚拟机)。

一次编译,到处运行

Java的发展史

详情见 Java发展史

Java的运行原理

Java中引入了虚拟机的概念。
即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。
编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的平台,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。

JDK

Java开发工具包(Java Development Kit),是一套用于Java编程人员的开发套件,其中包含了:

  • JRE ( Java Runtime Environment ) :Java运行时环境,其中最重要的部件是JVM;
  • Java开发工具:编译工具javac、API生成工具javadoc等;
  • 核心类库(Java API)

JDK的安装配置

方法一

在oracle官网下载并安装

方法二

配置JDK:
前提条件:需要包含完整JDK文件的文件夹
1、JAVA_HOME =

d:\xx\xx\jdk1.8

2、在Path中追加目录

%JAVA_HOME%\bin

3、CLASSPATH =

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

关于 Eclipse 开发工具

IDE (集成开发环境):可以自动编译(保存即编译)、代码提示。

工作空间

在 Eclipse 中可以建立多个工作空间(workspace),每个工作空间可以建立多个项目(project)
一个工作空间就是一套配置信息,在进行了工作空间切换后,之前工作空间的配置将不会生效。
程序在 project 中开发。

使用步骤

  1. 本地创建一个文件夹作为默认的工作空间;
  2. 创建 java project;
  3. 在 src 中新建 class 文件;
  4. 运行程序,在 class 文件中右键 「run as」-> 「java application」。

第一个JAVA程序

Hello,World程序的意图:验证配置的开发环境是否正确有效。
在某个目录中新建一个名叫Hello.java的文件(注意把文件后缀隐藏选项去掉),文件内容如下:

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

1、使用javac命令将 Hello.java 文件编译成 Hello.class 字节码文件

javac Hello.java

2、使用 java 命令,调用本机的 JVM 执行字节码文件

D:>java Hello
Hello,World!

另一个程序案例,使用Java编写乘法口诀表

public class Hello {
    public static void main(String[] args) {
        for (int i = 1; i < 9; i++){
            for (int j = 1;j <= i; j++) {
                System.out.print(i + "*" + j + "=" + (i*j) + "\t");
            }
            System.out.println();
        }
    }
}

运行结果

1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64

面向过程编译和面向对象编译
面向过程编程:通过一个函数去完成一件事情,而且这件事情完成以后,不会留下任何的遗产(一次性)。
面向对象编程:在完成一件事时,会将事情中的实体对象抽象出来,形成 类 的概念,事情的完成是通过类的对象之间发生关系去实现的。

类和对象

类是一群对象的特征母版,对象是类的实现。
特征(类)包含的内容有:基本属性(属性)、行为(方法)

基础语言要素

注释

代码注释是编程中非常重要的环节,往往优秀的程序员,注释写的比代码都多。

注释是不会被程序执行的。

注释可能出现的位置:
  • 类、方法、属性等上部(文档注释:通过 javadoc 命令生成 API 文档,方便使用的人阅读)
  • 方法体内负责业务逻辑处理过程中(一般性注释)
文档注释
/**
 - 相关的注释内容,甚至可以使用 HTML 标签
 -  */

在 javadoc 中也提供了丰富的标记

  • @author:指定程序的作者
  • @version:指定源代码的版本
  • @param:在方法中指定参数
  • @return:在方法中指定返回值
单行注释
// 单行注释
多行注释
/*
   第一行注释
   第二行注释
 */
JDK 帮助文档

在学习过程中,一定要经常的阅读 JDK 文档,去帮助理解相关类的定义。
看 JDK 中相关类的源码,去学习编码规范以及设计程序的思路。

标识符和关键字

标识符包含了 Java 中默认的关键字以及程序员自己定义的类名、方法名、变量名等等。
标识符的命名规范:

  • 只能包含数字、字母(大小写,Unicode字符)、下划线_ 、美元符 $
  • 不能以数字开头
    分隔符:
  • 花括号 {}:定义代码块,逻辑上是一个整体,包括类的主体、方法体、静态代码块、条件和循环语句的执行体;
  • 分号 ;:语句的结束,如果出现在一行中有几条语句,那么多条之间也要用 ; 隔开;
  • 方括号[] :用于数组中;
  • 圆括号 () :在方法中声明形式参数,在调用方法的时候传入实际参数,表达式优先级定义;
  • 空格:单个空格、Tab 键、Enter 键,空格的出现是不会影响程序运行的,但是良好的缩进,可以提高程序的可读性;
  • 圆点 . :用于类/对象与其成员之间的分隔,表示调用类/对象的属性或者方法。
    在Java中,只要看见单词首字母是大写的,那就是类。

数据类型

Java是一种强数据类型的语言,就是指在变量进行定义的时候,就指定了变量的数据类型是什么。 变量的概念:把一堆数据起了个名字。 数据类型其实就是在内存中用不同的结构对数据进行存储和运算。 内存:运行中的程序都会占用内存空间,因为程序在运行过程中,需要开辟包括方法栈区、变量等;广泛的理解,在程序运行结束后内存空间会被释放,但是定义的变量、方法等,都是有 *生命周期* 的,一旦变量销毁了,内存也是会被释放的。 在Java中,有垃圾自动回收机制 GC ,对于释放的或者无效的变量会自动回收,不像 C 、C++ 要手动的去释放。

数据类型的分类

基本数据类型

  • 数值型

    1、整数型:byte(-128-127)、short(15次方)、int(31次方)、long(63次方)
    2、浮点型:float(38次方)、double(308次方)
    在实际开发中,我们一般使用 int、double

  • 字符型
    char:用单引号表示,Java 中使用16位的 Unicode 字符集作为编码方式
    表示方式:1、直接通过单个字符表示:’a’、‘9’ 等;
    2、通过转义字符表示:’\t’、’\n’、’、r’、’\’;
    3、直接使用 unicode 表示:’\uxxxx’。
    在 Java 中是没有表现多个字符的基本数据类型的,但是在 Java 中提供了一个 String 类,去表现字符串。
  • 布尔型
    boolean:表示逻辑中的真和假,只有true/false两个值。

在基本数据中,是可以进行类型之间的强制转化的,但是要注意,如果从低精度的转化为高精度时不会有问题,但是从高精度转化为低精度时,可能出现精度确实。

引用数据类型

后续补充

变量

在 JS 中,通过 var i = 10; i = “abc”; 使用变量,因为没有在声明变量的时候给于数据类型的强制定义,可以给变量赋予任意类型的值。我们把 JavaScript 称为弱类型编程语言。 Java 在声明编程时候,必须准确定义变量的数据类型。

变量声明的语法:

数据类型 变量名; 例如:`int a`;

变量赋值的语法:

变量名 = 值; 例如:`a = 10`; 两者可以写在一起: 数据类型 变量名 = 值; 例如:`int a = 10`;

变量的生命周期

先记住:变量的生命周期在 {} 定义的范围内。

直接量

直接量是指在程序中直接通过源代码的方式指定的值,有时也成为字面量。

在编译的时候,JVM 就定义到常量池中。
比如 int a = 5; 这里的 5 就是一个直接量。
在 Java 中可以定义的直接量包含:基本数据类型、字符串类型、null。

关于 String 类的特殊说明

String 类是一个不可改变类,意思就是在String 对象被创建出来后就不能被改变了。当程序第一次使用某个字符串直接量时,Java 会使用常量池来缓存该字符串直接量。如果后面程序用到了这个字符串直接量,Java 会直接引用常量池字符串。 **注意**:在常量池中不会存在两个一样的字符串字面量值。

运算符

算术运算符

+ - \* / % ++ --
  • 运算符除了进行数学运算的加法之外,还可以做字符串的拼接。
    ++ 自增
    – 自减
    实例:
int m = 10;
System.out.println(m++); // 10
System.out.println(m); // 11
System.out.println(++m); // 12
System.out.println(-m); // -12

赋值运算符

= += -= \= *= %=

实例

m += 1; // m = m + 1
System.out.println(m); // 13
m -= 1; // m = m - 1
System.out.println(m); // 12

比较运算符

用于判断两个变量或者常量的大小,返回结果为 true/false。

> < <= >= == !=

左右两边的操作数只能是数值

逻辑运算符

运算符两边必须是 boolean 类型的变量、常量、表达式
&& 或者 ||!
与:只要有一个假就是假
或者:只要有一个真就是真

三目运算符

expression ? if-true-statement : if-false-statement
实例:

int age = 16;
String ageStr = age > 18 ? "成年" : "未成年";
System.out.println(ageStr); // 未成年

结合性和优先级

应该尽量在比较复杂的表达式中使用圆括号,明确的标注计算的优先级。

运算符优先级表

说明:
- 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
- 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
- instanceof作用是判断对象是否为某个类或接口类型
- 注意区分正负号和加减号,以及按位与和逻辑与的区别
- 其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:

int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //这样更直观

流程控制

  • 顺序结构
  • 判断(分支选择)结构
  • 循环结构

顺序结构

程序是一个自上而下运行的过程。

分支选择结构

Java 中的分支选择结构有 if 结构、 switch 结构

if 结构

具备三种类型的结构表现形式
- 形式一:

if (logic expressiong) {
    statement;
}
int age = 20;
if(age > 18) {
    String name = "Tom";
    System.out.ptintln("我叫" + name ",已经" + age + "岁了,我成年了!");
}
  • 形式二:
if (logic expression) {
    statement;
} else {
    statement;
}
int age = 16;
if (age > 18) {
    String name = "Tom";
    System.out.println("我叫" + name + ",已经" + age + "岁了,我已经成年了!");
} else {
    System.out.println("我还未成年!");
}
  • 形式三:
if (logic expression) {
    statement;
} else if {
    statement;
} else {
    statement;
}
if (age >= 0 && age <= 10) {
    System.out.println("少年");
} else if (age <= 18) {
    System.out.println("青少年");
} else if (age <= 30) {
    System.out.println("青年");
} else if (age <= 50) {
    System.out.println("中年");
} else {
    System.out.println("老年");
}

switch结构

switch 语句是有控制表达式和多个 case 标签块组成。在控制表达式中,只允许出现 byte、short、int、char 四种基础数据类型,在 JDK1.7 以后,支持 String 类型的控制表达式。

switch (expression) {
    case condition1 : {
        statement;
        break;
    }
    case condition2 : {
        statement;
        break;
    }
    default : {
        statement;
        break;
    }
}
String color = "red";
switch (color) {
    case "red": {
        System.out.println("红色");
        break;
    }
    case "blue": {
        System.out.println("蓝色");
        break;
    }
    case "green": {
        System.out.println("绿色");
        break;
    }
    default: {
        System.out.println("没有找到");
        break;
    }
}

注意:在 case 中要加入 break 关键字跳出;在实际的开发中,我们一般使用 if - else 结构替代 switch。swtich 结构应用的较少。

循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码。
被重复执行的代码叫做循环体。
循环语句可能包含的部分有:
- 初始化语句(init_statement):一条或多条语句,这些语句用于完成一些初始化的工作。
- 循环条件(test_expression):是一个 boolean 类型的表达式,这个表达式决定是否继续执行循环体。
- 循环体(body_statement):如果条件允许,循环体会被反复执行。
- 迭代语句(iteration_statement):在一次循环体执行结束后,对循环体条件进行求值,通常用于控制循环条件中的变量,使得循环在合适的时候结束。

while 结构

(init_statement);
while (test_expression) {
    body_statement;
    [iteration_statement];
}
int sum = 0;
int i = 1;
while (i <= 10) {
    sum = sum +i;//sum +=i
    i = i+1;//i++ 
}
System.out.println(sum);//55

do-while 结构

(init_statement);
do {
    body_statement;
    [interation_statement];
} while (test_statement)
int i = 11;
int sum = 0;
do {
    sum += i++;
    //sum = sum + i;
    //i = i + 1;
} while (i <= 10);
System.out.println(sum);//11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值