Java特点
- 面向对象:使用计算机模拟现实世界,解决现实问题,贴近人类思维模式
- 简单:相比较于C、C++、C#,不易造成内存溢出
- 跨平台:操作系统、服务器
Java执行机制
*.java 编译成 *.class(一个或多个)
可以运行在多个平台上(例:Windows、Linux、Mac等),体现跨平台的特点
肯·汤普森(左)
丹尼斯·里奇(右) :C语言之父,UNIX之父
1. Java语言基础
章节重点:
1.进制转换
2.补码计算
字符类型和整型的相互转换
内容辅助快捷键:”。。。“ + Alt + /
1.1 计算机理论基础
编程:编写程序,实现功能。
编程语言:编写程序的语言。
Java,PHP,C#,GO,易等属高级语言。
编译、运行过程:
源文件由编译器编译成字节码文件,后缀.class;字节码由java虚拟机解释运行,生成.java文件
1.2 进制
1.2.1 进制的分类
进制:进位制,用来表示数字时的进位制度。
十进制:用数字0-9表示每个自然数,逢10进1位。
二进制:用数字0和1表示每个自然数,逢2进1位。
八进制:用数字0-7表示每个自然数,逢8进1位。
十六进制:用数字0-9,字母A-F表示每个自然数,逢16进1位。
在写一个数字时,需明确进制:
- 二进制数字:以“0b”作为开头
- 八进制数字:以“0”作为开头
- 十六进制数字:以“0x”作为开头
- 无以上开头时,默认为十进制数字
数据存储的单位:
把一个二进制位称作一个 比特位:bit
8bit=1byte(字节)
1024byte=1kb
1024kb=1mb
1024mb=1GB
1024GB=1TB
1024TB=1PB
1024PB=1EB
1024EB=1ZB
1024ZB=1YB
1024YB=1DB
NB BB
1.2.2 进制的转换
将不同的进制进行进制的相互转换
十进制和其他进制的相互转换**
-
十进制转换成其他进制
- 辗转相除法:用一个数字除进制,再用商除进制,一直到商为0时结束,将每一步所得余数倒置连接即为指定的进制表示。
- 累加法:将每一位数字,乘以(进制位数-1)次方,最后将所有的乘积累加起来。
-
其他进制位的相互转换
-
一个八进制位可以等价替换成三个二进制位
-
一个十六进制位可以等价转换成四个二进制位
-
例:0176=0b001 111 110
0x176=0b0001 0111 0110
0b1 100 101 010=0(1452)
0b0011 0010 1010=0x(32A)
-
-
二进制表示时需要补齐四位并保留符号位,若符号位被占用则需扩充一个字节(8个二进制位)。
1.2.3 原反补
关于负数:对于一个二进制数字来说,最高位(又称符号位)用于表示数字符号,其中0代表正数,1代表负数。
在计算机中,由于正负数表示形式不同,所以一切计算及存储均以补码形式进行。在运算中可能出现的情况:
1.计算中可能溢出,溢出位舍去。
2.补码运算得出的结果也是补码。
3.补码求原码:对该数字再求一次补即可。(人为时可以减1后取反)
原码:由数字直接计算出的二进制形式。
反码:正数的反码与原码相同,负数的反码符号位不变,其他位按位取反。
补码:正数的补码和反码(原码)相同,负数的补码是反码加1。
1.3 数据类型
在Java中,数据类型分两种:基本数据类型 和 引用数据类型。
基本数据类型分为以下几种:
-
整型:整数类型。用来描述程序中的整数,包括正数,负数,0。
特殊:1.若需要一个long型的变量,可以给一个整型字面量后面加一个L。
2.浮点型的字面量默认的推导类型是double,若需要给float赋值,需要在字面量后添加一个F。
3.字符型是用单引号括起来的一个字符,单引号中的内容长度只能是1。
-
字节型 byte:*占内存1byte。[-2 [^7] ,2[^7]-1]
布尔型 boolean:用来描述程序中的非真即假,非假即真的数据,占1byte。
-
短整型 short:占内存2byte。[-2[15],2[15]-1]
-
整型 int:占内存4byte。[-2[31],2[31]-1]
-
长整型 long:占内存8byte。[-2[63],2[63]-1]
-
浮点型:小数类型(无取值范围)。用来描述程序中的小数,包括正数,负数。
- 单精度浮点型 float:4byte。
- 双精度浮点型 double:8byte。
在计算机中,小数以科学计数法形式记录。
判断数据类型:
需判断的对象 instanceof 判断的数据类型
注意事项:
byte、short、char参与运算的结果是int类型
字符型可以和整型等价交换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LdODe86E-1587710468217)(C:\Users\陈永豪\Desktop\1.png)]
1.3.1 常见转换符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符 | 092 |
’ | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
转 换 符 | 说 明 | 示 例 |
---|---|---|
%s | 字符串类型 | “mingrisoft” |
%c | 字符类型 | ‘m’ |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 99 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.99 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | |
%h | 散列码 | |
%% | 百分比类型 | % |
%n | 换行符 | |
%tx | 日期与时间类型(x代表不同的日期与时间转换符 |
注:% 与 数据类型字符之间可以添加正整数n,意为占用n位长度,不够n位则往前补0。
% 与 数据类型字符之间可以添加 .正整数n,意为小数点后保留n位,不够则补齐。
1.4 标识符
由若干字符组成的有序序列,用来描述程序中的一个数据。
1.4.1 标识符的命名规则(强制服从)
1.只能由字母、数字、下划线和$符号组成。
2.不能以数字作为开头。
3.不能是系统关键字或者保留字。
关键字:其实也是一个标识符,遵循以上要求,但已被系统占用并赋予特殊含义,此时该标识符不能被用户使用。
保留字:类似关键字,也是一个标识符,遵循以上要求,已被系统占用但未赋予特殊含义。
4.标识符区分大小写
1.4.2 标识符的命名规范(基于可读性考虑)
1.望文知意
2.遵循驼峰命名法:
-
大驼峰:
组成一个标识符的所有单词首字母均大写。建立类时,类属于标识符,遵循大驼峰命名法。
-
小驼峰(默认写法):
首个单词除外,从第二个单词开始,每个单词的首字母大写。
《阿里巴巴Java开发规范手册》
1.5 变量、常量
1.5.1 变量
在程序运行中,可以发生改变的数据,新值覆盖旧值。例:身高,体重
语法1:数据类型 标识符,例:int a;
语法2:数据类型 标识符=初始值;局部变量在使用前必须赋值,例:int a =10;
若需声明多个相同类型的变量:
语法:数据类型 标识符1,标识符2,标识符3。。。例:int a1,a2=10,a3,a4;
1.5.1.1 局部变量
定义在某一局部代码段中的变量。局部变量有作用域。
作用域:某一个变量可以被访问的范围称为该变量的作用域。
- 确定某变量的作用域:从变量声明开始到变量所在代码段结束。
- 两个相同名字的局部变量的作用域不允许有重叠。
1.5.1.2 全局变量
定义在类 class 中,与方法平级的变量
1.5.2 常量 final
在程序运行中,不可以发生改变的数据,在Java中允许对常量先声明后赋值。例:出生年月
语法1:final 数据类型 标识符 ;例:final int a ;
语法2:final 数据类型 标识符 = 初始值;例:final int a = 10;
1.5.3 静态static
类的成员变量有两种:一种是被 static 关键字修饰的变量,叫类变量或静态变量,一种是没有被 static 修饰的,叫做实例变量
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象
静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
java 虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区
被类的所有实例共享,静态变量可以通过类名直接访问。
静态变量的生命周期取决于类的生命周期,当类被加载的时候,静态变量被创建并分配内存空间,当类被卸载时,静态变量被摧毁,并释放所占有的内存。
类的每一个实例都有相应的实例变量,每创建一个类的实例,java 虚拟机为实例变量分配一次内存,实例变量位于堆区中
1.6 JDK的安装与配置
相关名词:
JDK:Java Development Kit (Java开发框架,Java开发中用到的所有工具的合集)。
JRE:Java Runtime Envronment(Java运行环境,为Java程序的运行提供了必要的条件)。
JVM:Java Virtual Mechine(Java虚拟机,Java程序是运行在虚拟机中的)。
JDK包含JRE,JRE包含JVM。
1.安装JDK。
2.环境变量的配置。
1.为什么要配置环境变量
为了在任意位置均可访问JDK中指定的程序
2.需要在任意位置访问的指令
1.javac:编译程序,将一个Java程序编译为字节码文件。(后缀名 .class)
2.Java:将这个编译后的字节码文件加载到Java中,执行。(后缀名 .java)
3.如何配置环境变量
1.我的电脑->右键属性->高级系统设置->环境变量->Path
2.验证环境变量是否配置好
1.打开心得DOS窗口,输入javac,如提示内容不是“不是内部或外部命令”,说明配置成功。
1.7 Eclipse的使用
workspace:工作空间,一个workspace中可以包含多个Java项目。
Package explorer:包管理器,管理当前工作空间中所有的项目及项目中的文件 。
包:我们将Java文件,直接存放在某一包中,包相当于一个文件夹。包名在系统中会根据其命名中“.”拆分成嵌套式子文件夹。
src文件夹:存储代码编译区域输入的文件。
bin文件夹:存储Java文件相应的二进制位的字节码文件。
1.8 第一个Java程序
在一个有包含关系的代码段中,被包含内容与上级代码段保持一个缩进距离。
1.8.1 注释
写给程序员看,对某一代码段的描述,注释内容不会被编译
- 单行注释://这个就是单行注释
- 多行注释:/* 这是一个多行注释。。。 */
- 文档注释:/** 常用来注释类或者方法 **/
1.8.2 类 class
一个Java文件中可以存在多个类。每一个类都会编译生成一个.class字节码文件。但只有和文件名相同的类才可以设public访问权限。
1.8.3 主函数
快捷方式: 输入main之后按"alt+/"组合键
程序由此执行,程序的入口,@param args
public static void main(String[] args){
}
注:一个.Java文件中仅有一个类(包含主函数)可以设置public权限。
1.8.4 在控制台输入内容
1.导入包:
import java.util.*;
2.创建IO流:
Scanner scanner = new Scanner(System.in);
3.读取控制台上的一行内容并对line赋值:
String line =scanner.nextLine() //输出并赋值一个字符串;
//scanner.next()从控制台读取单词,遇到空格或换行停止读取;
//scanner.nextInt()输入后转整型并赋值;
//scanner.nextFloat()输入后转浮点型并赋值;
//scanner.nextDouble()输入后转浮点型并赋值;
//scanner.nextBoolean()输入后转布尔型并赋值;
注意:没有scanner.nextChar()。
4.输出line:
System.out.println(line);
1.9 数据类型转换
可以在方法前加上@SuppressWarnings(“unchecked”)注解,意为取消未检查类型的警告。
一个变量一旦声明完成,在内存上开辟的空间大小是不允许改变的。也就是说一个变量的类型不能发生改变。这里的数据类型转换指声明一个新类型的变量并赋予原变量的数值。
-
自动类型转换(又叫做隐式转换):
由取值范围小的类型,转型为范围大的数据类型。
不存在精度丢失问题。
不需要任何额外操作,直接赋值即可。
例:short a =100;
int s =a;
-
强制类型转换(又叫做显式转换):
由取值范围大的类型,转型为范围小的数据类型。
可能存在精度丢失问题(去掉高位直至满足位数限制,视为最高位为符号位的反码,求其原码)。
需要进行额外操作。
例:byte b=(byte)a;
注意:byte,short,char类型的变量在运算的时候会自动转型位int类型。
- 字符类型可以和整型数据相互转换:方法同自动类型转换
1.10 字符型
关键字:char
每个字符在存储时均对应一个数字。在字符集中有定义。
常见字符集:ASCII、GB2312、Unicode(万国码)、UTF-8(肯.汤普森发明)
A—Z = 65—90,a—z=97—122
转义字符 \:
作用:1.让特殊功能字符转换成普通字符。例:’ \ ’ '表示字符 ’ 。
2.可以配合某一些普通字符,使其具有特殊功能,例:\n:换行 \r:回车 \t:制表符TAB
注意:
1.输出“\”时需要转义“\”,即“\ \”。
2.转义字符适用于字符串中。
1.11 字符串
定义:由若干字符组成的有序序列。其内容由双引号” “扩起。
关键字:String
1.12 运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdtSVdAa-1587710468222)(5.png)]
1.12.1 算术运算符
算术运算可以对任意类型的数字进行运算,包括整型和浮点型。
规则:
整型&整型->整型,浮点型&任意类型->浮点型。
若需浮点型转整型:完全舍去小数部分。
%:求余(求模):取余数。
++/–:自增/自减,可放在变量前后,放变量前:先操作后取值;放变量后:先取值后运算。
+ - * / % ++ --
数字类型+数字类型—>数字类型
字符类型+任意类型—>字符类型,此时+代表拼接运算符,此时该任意类型转为字符类型,例:
String str = 1+2+3+"hello"+3+2+1;
System.out.println(str); //结果为 6hello321
注:组合原算法在运算过程中会自动进行类型转换
1.12.2 赋值运算符
赋值运算是有结果的,其结果是赋值完成后变量的值。
= += -= *= /= %=
1.12.3 关系运算符
> < >= <= == !=
1.12.4 逻辑运算符
&(与) |(或) !(非) ^(异或) &&(短路与,若前部分足以判断,则后面内容不执行) ||(短路或)
注意:一个数字与任一数字异或两次,一定得到自己。
1.12.5 位运算符
参与运算的一定是整型数字
规则:
将参与运算的数字求出补码,对补码的每一位进行类似逻辑运算的操作,再求出原码。其中1相当于true,0相当于false。
& | ^ ~(按位取反,包括符号位) <<(位左移运算) >>(位右移运算,最高位补符号位,结果遵循向下取整原则) >>>(无符号右移运算,最高位补0)
位移运算符:将一个数字的补码按指定方向位移若干位。
例:10<<2指的是0000 1010->0010 1000,即变成40;10>>2指的是0000 1010->0000 0010,即变成2;
-10>>2指的是1111 0110->1111 1101->1000 0011,即变成-3。
1.12.6 三目运算符
Boolean ? value1 : value2
规则:若Boolean值为true,取值value1,否则取值value2。
1.12.7 运算符的优先级
整体来说:一元>二元>三元
算术运算: / % > + —*
逻辑运算:! > & > |
= 的优先级最低,()的优先级最高。