Java知识回顾(一)

一、java基本知识回顾

1.1、基本的DOS命令

磁盘操作系统(Disk Operating System)

命令

全称

意义

cls

clear screen

清除DOS屏幕

dir

directory

列出当前目录下所有的子文件(包括子目录)

cd

change directory

改变路径

exit

exit

退出DOS界面

cd命令

在dos中,可以使用cd命令进行目录的切换

目标:切换到上级目录、切换到根目录、切换到C盘
实现:
cd ..
cd \
c:

1.2、jdk、jre和jvm

名字

全称

意义

jdk

java development kit

java开发工具,针对开发人员

jvm

java virtual machine

java虚拟机,针对使用者(实现java可移植性)

jre

java runtime environment

java运行环境,包含了jvm,针对使用者

简单来说,JDK是整个Java的核心部分,它包含了JRE、一些java工具和java基础的类库;

JRE包含了JVM和类库lib,只有JVM还不能进行class的执行,因为解释class的时候,JVM需要调用解释所需要的类库lib。


1.3、java的加载与执行

编译阶段:

java源程序经过java工具javac(java编译器)编译成字节码文件.class(可以生成多个)

javac+ 源文件路径

运行阶段:

通过java命令运行字节码文件进行运行。(切换到java字节码文件所在目录)

java+ 类名

Java运行阶段的执行过程:

java.exe命令会启动Java虚拟机(jvm),jvm会启动类加载器classLoader,

类加载器会在硬盘上搜索相应的字节码文件,找到该文件后会将该字节码文件装载到jvm中

jvm随后将字节码文件解释成机器语言


1.4、java语言中的注释

注释不会被编译到自己码文件中,对java源代码进行解释说明

名字

快捷键

意义

单行注释//

ctrl+/

只注释当前行

多行注释/* */

ctrl+shift+/

注释一个区域

Javadoc注释

在一个方法或类的开头,输入/**,然后按回车

java工具javadoc生成注释文档

/**
* Javadoc注释
* Javadoc注释
*/

1.5、java类的访问修饰符

名字

意义

public

“公共的” 被修饰的类、属性以及方法可以跨类、且允许跨包

protected

“保护访问权限" 被修饰的属性以及方法能被类本身的方法访问,即使子类不在同一个包

default

”默认访问权限/包访问权限“ 只允许在同一个包中进行访问

private

”私有的“ 只能被该类的对象访问,子类都没有访问权限

在java源文件中,可以存在多个类,但是只能存在一个public类(不是必须存在),且源文件名称必须与public类名相同。每一个class类都会定义生成一个XXX.class字节码文件。

每一个class文件当中都可以边写main方法,设定程序的入口,当要执行相应类X里的main方法时,java X(X中必须有main函数)


二、java语言基础

2.1、标识符

标识符用来标记类、方法、变量等程序员可以自己命名的东西;

标识符使用字母、数字和下划线_、美元符号$进行命名,且不能由数字开头,且严格区分大小写,关键字不能作为标识符使用;

标识符命名规范

  1. 最好见名知义
  2. 遵守驼峰命名规范UserService
  • 类名、接口名: 首字母大写,后面每个单词首字母大写

class UserService

  • 变量名、方法名:首字母小写,后面每个单词首字母大写

float userService

  • 常量名:全部字母大写

final float USERSERVICE


2.2、关键字

在java中,关键字都是小写的

class、extends、implements、import、package、break、case等


2.3、变量

变量是内存中的一块空间,这块空间有“数据类型”、“名字”和“字面值”

变量是内存中存储数据的最基本的单元,有了变量之后,内存空间可以得到重复的利用率

变量的作用域

变量的作用域描述的是变量的有效范围

名字

含义

类级

全局变量或者静态变量,static关键字修饰,在类定义后就存在,不需要实例化,可以通过类名直接访问

对象实例级

成员变量,需要实例化才会分配内存空间

方法级

方法内部定义,局部变量

块级

定义在一个块内的变量,如for语句等

//  Identifer 是类名
public class Identifer {
   static int i;//静态变量,在类名被加载时也被创建
   public static void main(String[] args) {
        doSome();
        System.out.println(i);
    }
//    dosome 是方法名
    static void doSome(){
        i = 10;
    }
    
public class Identifer {
   int i;
   public static void main(String[] args) {
        doSome();
        System.out.println(i);
    }
    static void doSome(){
        new Identifer().i = 10;//实例化对象
    }

变量的分类

按照变量出现的位置分类

名字

描述

局部变量

在方法体重声明的变量

成员变量

在类体内,方法体之外声明的变量

java遵循“就近原则”


数据类型

java程序中有很多数据类型,不同的数据类型占用不同的内存大小,数据类型的作用就是知道JVM在运行程序中分配数据内存空间大小

数据类型一共分为两大类:引用数据类型和基本数据类型

引用数据类型:类、接口、数组等(字符串)

基本数据类型:有四大类八小类(整数型、浮点型、布尔型和字符型)

名称

描述

占用空间大小[字节]

默认值

byte

字节

1

0

short

短整型

2

0

int

整型

4

0

long

长整型

8

0

float

浮点数(单精度)

4

0.0

double

浮点数(双精度)

8

0.0

boolean

布尔型

1

false

char

字符型

2

\u0000(\u表示unicode编码)


编码方式

为了解决字符能够被机器所解释

英语 ASCII

中文 GB2312<GBK<GB18030

全球统一编码方式 unicode编码方式(java源代码采用utf-8较多) UTF-8/16/32....


整数类型

java中的整数型字面值是int类型

名称

方法

十进制

默认(10)

八进制

0开头(010)

十六进制

0x开头(0x10)

long x = 123;
    //x 是long型,123是int类型
long x = 2147483647;
    //编译出错,因为2147483647会被当做int处理,但是超出了int范围
long x = 2147483647L;
	//就可以直接作为一个8位的long型数据

类型转换

  1. 八种基本数据类型除了布尔类型之间都可以相互转换
  2. 大容量类型转换给小容量无法直接编译,需要添加强制类型转化符,但是运行阶段可能会损失精度,将左边的二进制去掉,保留右边的二进制位。
  3. 当整数字面值没有超出byte、short和char的取值范围时候,可以直接赋值给byte、short和char类型的变量
  4. byte、short和char混合运算的时候,先转换为int类型再计算,当不同的数据类型进行计算时,先将数据转化为较大的数据类型再进行计算
long x = 100L;
int y = (int)x;
double z = 10/3
    //结果为3.0  10/3结果为3,int类型3转化为浮点类型3.0
    
//重点,不要再编译器掺杂运行过程
    short i = 1;
    byte j = 2;
    short k = i+j;
    //编译报错,i和j在运算时,被当做int类型计算,计算结果为int类型,编译期不会判断是否在精度范围内,会报错。
    short l = 3;
    //编译通过,编译期判断int类型3没有超过short范围,可以直接赋值

2.4、运算符

加圆括号是一种编程规范,因为程序不只是写给自己看

算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。

  • 算术运算符(+、-等)
  • 关系运算符(>、<、!=等)

关系运算符比较的是两个对象保存的值之间的大小

  • 逻辑运算符(&、|、!、&&等)

其中&&&计算结果相同,但是短路与&&存在短路现象

int x = 10;
int y = 8;
System.out.print(x<y & ++x<y)
    //&后面的表达式依然会执行
System.out.print(x<y && ++x<y)
    //&&后面的表达式不再执行,执行效率高,但是,在一定条件下,可能也需要第一种方式
  • 赋值类运算符(=、-=、+=等,从右到左)

扩展类赋值运算符不改变数据类型

int a = 1;
byte a = a+5;//编译出错
byte a += 5;//编译通过,因为等于byte a = (byte)(a+5)
  • 字符串连接运算符(+)
  • 条件运算符(三元运算符)(?:)

2.5、控制语句

  • 控制选择结构语句(if、switch
  • 控制循坏结构语句(for、while、do while
    //&&后面的表达式不再执行,执行效率高,但是,在一定条件下,可能也需要第一种方式
* 赋值类运算符(`=、-=、+=`等,从右到左)

> 扩展类赋值运算符不改变数据类型

```java
int a = 1;
byte a = a+5;//编译出错
byte a += 5;//编译通过,因为等于byte a = (byte)(a+5)
  • 字符串连接运算符(+)
  • 条件运算符(三元运算符)(?:)

2.5、控制语句

  • 控制选择结构语句(if、switch

Switch(int或者String),当然由于char字符型、short等数据类型先转化为int,也可以使用

case可以合并

switch(i){
        case1:case2:case3:
       	    java语句;
            break;
        default:
            java语句;
}
  • 控制循坏结构语句(for、while、do while

for(初始化表达式;布尔表达式;更新表达式)
其中三个表达式都不是必须的

1. 执行初始化表达式(只执行一次)
2. 判断布尔表达式(更新表达式)
  • 改变控制语句顺序(break、continue

break可以指定中断的循环for1,使用的频率特别低

for1:for(int i = 0;i < 3;i++){
    for2:for(int j = 0;j < 2;j++ ){
        break for1;
    }
}