第一章 Java概述
1.1 Java重要特点
-
Java语言是面向对象的
-
Java语言是跨平台性的(一个编译好的.class文件可以在多个系统下运行)
-
Java语言是解释型的(解释型语言:javascript,PHP,java-----需要解释器来执行) (编译型语言:c/c++)
1.2 相关概念
-
JDK --- Java开发程序包
-
JRE --- Java运行环境
-
JRE = JVM(Java虚拟机)+ Java的核心类库(类)
-
JDK = JRE + java开发工具
1.3 Java开发注意事项
-
Java源文件以.java为扩展名。源文件的基本组成部分是类(class)
-
Java应用程序的执行入口是main()方法。它有固定的书写格式:public static void main(String[] args) {...}
-
Java语言严格区分大小写
-
Java方法由一条条语句构成,每个语句以';'结束
-
大括号都是成对出现的,缺一不可。[先写{}在写代码]
-
一个源文件最多只能有一个public类。其他类的个数不限
-
如果源文件包含一个public类,则文件名必须按该类命名!
-
一个源文件中最多只能有一个public类。其他类的个数不限,也可以将main方法写在非public类中,然后指定运行非public类,这样入口方法就是非public的main方法
1.4 Java常用的转义字符
-
\t : 一个制表位,实现对齐的功能
-
\n: 换行符
-
\ \: 一个\
-
\ ": 一个"
-
\ ‘:一个’
-
\r: 一个回车 System.out.println("韩顺平教育\r北京");---------北京平教育
1.5 初学java易犯错误
-
找不到文件-----解决方法:源文件名不存在或者写错,或路径错误
-
主类名和文件名不一致-----解决方法:声明为public的主类应与文件名一致,否则编译失败
-
缺少分号----解决方法:编译失败,注意错误出现的行数,再到源代码的指定位置改错
-
学习编程最容易语法错误(初学者)------看编译器报告的错误信息
-
举例:
-
1.英文符号写成中文符号 (1&l 0&o)
-
2.拼写错误
-
3.相对比较困难的错误,其实是 业务错误,环境配置错误(!!!!!!!)
1.6 注释(comment)----Java中的注释类型
-
单行注释
-
基本格式---//注释文字
-
-
多行注释
-
基本格式---/* 注释文字 */
-
使用细节
-
被注释的文字,不会被JVM(java虚拟机)解释执行
-
多行注释里面不允许有多行注释嵌套
-
-
-
文档注释---注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档,一般写在类
-
基本格式
-
如何生成对应的文档注释
-
1.7 常用DOS命令
-
查看当前目录是有什么
dir dir d: \abc2\xxx
-
切换到其他盘下:盘符号 cd-------change directory
案例演示:切换到C盘 cd/D c:
-
切换到当前盘的其他目录下(使用相对路径和绝对路径演示)
案例演示: cd d:\abc2\test200 cd.. \ .. \ abc2\test200
-
切换到上一级:
案例演示: cd..
-
切换到根目录:cd\
案例演示 : cd\
-
查看指定的目录下所有的子级目录
tree
-
退出DOS
exit
第二章 数据类型
2.1 数据类型
-
java数据类型分为两大类 基本数据类型,引用类型
-
基本数据类型有8种,数值型[byte,short,int,long,float,double],char,boolean
-
引用类型[类,接口,数组]
2.1.1 整数类型
-
整型的类型
类型 | 占用存储空间 | 范围 |
---|---|---|
byte(字节) | 1字节 | -128~127 |
short(短整型) | 2字节 | -32768~32767 |
int(整型) | 4字节 | -2147483648~2147483647 |
long(长整型) | 8字节 | -2^63~2^63-1 |
-
Java各整数类型有固定的范围和字段长度,不受具体OS[操作系统]的影响,以保证java程序的可移植性
-
Java的整型常量默认为int型,声明long型常量须后加'l'或'L'
-
Java程序中变量长声明为int型,除非不足以表示大数,才使用long
-
bit:计算机中的最小存储单位。byte:计算机中基本存储单元,1byte = 8bit。
2.1.2 浮点类型
-
浮点型的分类
类型 占用存储空间 范围 单精度float 4字节 -3.403E38~3.403E38 双精度double 8字节 -1.798E308~1.798E308 说明:
1.关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
2.尾数部分可能丢失,造成精度损失(小数都是近似值)
-
与整数类型类似,Java浮点型也有固定的范围和字段长度,不受具体OS的影响
-
Java的浮点型常量默认为double型,声明float型常量,须后加'f'或"F"
-
浮点型常量有两种表示形式
-
科学计数法形式:如 3.7f2[] 5.12E-2-----0.0512 5.12e2-----512.0
-
十进制数形式:如 3.7 37.0f . 375
-
通常情况下,应使用double型,因为它比float型更精确
-
浮点数使用注意:2.7 和 8.1 / 3 比较
-
2.1.3 字符类型
-
字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符用字符串String(后面详解)
-
字符型使用细节
-
字符常量是用单引号( '' )括起来的单个字符。如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
-
Java中还允许使用转义字符' \ '来将其后的字符转变为特殊字符型常量。如:char c3 = '\n'; // '\n'表示换行符
-
在java中,char的本质是一个整数,在输出时,是unicode码对应的字符unicode
-
可以直接给char赋一个整数,然后输出时,会按照对应的unicode字符输出[]
-
char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
-
-
字符类型本质
-
字符型存储到计算机中,需要将字符对应的码值(整数)找出来,比如'a'
-
存储:'a' == > 码值 97 ==> 二进制 ==> 存储
-
读取:二进制 => 97 ===> 'a' => 显示
-
-
字符和码值的对应关系是通过字符编码表决定的
-
2.1.4 布尔类型
-
布尔类型也叫boolean类型,boolean类型数据只允许取值true和false,无null
-
boolean类型占1个字节
-
boolean类型适于逻辑运算,一般用于程序流程控制 (后续详讲)
-
if条件控制语句;
-
while循环控制语句;
-
do-while循环控制语句;
-
for循环控制语句
-
-
说明
-
不可以0 或非 0 的整数替代flase 和true,这点和C语言不同
-
2.2 编码
-
介绍一下字符编码表
-
ASCLL (编码表 一个字节表示,一个128个字符,实际上一个字节可以表示256个字符,只用128个)
-
Unicode (编码表是固定大小的编码,使用两个字节来表示字符,字母和汉字统一都是占用2个字节,这样浪费空间)
-
utf-8 (编码表,大小可变的编码,字母使用1个字节,汉字使用3个字节)
-
gbk (可以表示汉字,而且范围广,字母使用1个字节,汉字2个字节)
-
gb2312 (可以表示汉字,gb2312 < gbk)
-
big5码 (繁体中文,台湾,香港)
2.3 数据类型转换
2.3.1 基本数据类型转换
-
当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这就是自动类型转换
-
数据类型按精度( 容量 )大小排序为
char➡int➡long➡float➡double
byte➡short➡int➡long➡float➡double
-
自动数据类型转换注意事项和使用细节
-
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
-
当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换
-
(byte,short) 和 char 之间不会相互自动转换
-
byte,short,char 他们三者可以计算,在计算时首先转换为int类型
-
boolean 不参与转换
-
自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
-
2.3.2 强制类型转换
-
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符 ( ) ,但可能造成精度降低或溢出
-
强制类型转换细节说明
-
当进行数据的大小从 大 ➡ 小,就需要使用强制转换
-
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
-
char 类型可以保存 int 的常量值,但不能保存int 的变量值,需要强转
-
byte 和 short 类型在进行运算时,当做int 类型处理
-
2.3.3 基本数据类型和String类型的转换
-
在程序开发中,我们经常需要将基本数据类型转成String 类型。或者将String类型转成基本数据类型
-
基本类型转String类型
-
语法:将基本类型的值 + " "
-
-
String类型转基本数据类型
-
语法:通过基本类型的包装类调用parseXX方法即可
-
-
注意事项
-
在将String 类型转成 基本数据类型时,要确保String类型能够转成有效的数据,比如:我们可以把 "123",转成一个整数,但是不能把"hello"转成一个整数
-
如果格式不正确,就会抛出异常,程序就会终止
-
-
// 怎么把字符串转成字符char -> 含义是指 把字符串的第一个字符得到
// str=''hello'' -> str.charAt(0) 得到str字符串的第一个字符 'h'
第三章 运算符
3.1 运算符介绍
-
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
3.2 算术运算符
-
算术运算符一览
运算符 运算 范例 结果 + 正号 +7 7 - 负号 b=11,-b -11 + 加 9+9 18 - 减 10-8 2 * 乘 7*8 56 / 除 9/9 1 % 取模(取余) 11%9 2 ++ 自增:先运算后取值 a=2;b=++a a=3;b=3 ++ 自增:先取值后运算 a=2;b=a++ a=3;b=2 -- 自减:先运算后取值 a=2;b=--a a=1;b=1 -- 自减:先取值后运算 a=2;b=a-- a=1;b=2 + 字符串相加 "ljn" + "java" "ljn java" -
+,-,*,/,%,++,--,重点讲解 / 、%、++
% 取模的本质是一个公式 a % b = a - a / b *b
-
自增: ++
作为独立的语句使用:
前++ 和 后++ 都完全等价于i = i + 1;
作为表达式使用
前++ :++i先自增后赋值
后++ :i++先赋值后自增
-
--, +、-、*是一个道理,可类推
3.3 关系运算符(比较运算符)
-
关系运算符的结果都是boolean型,要么是true,要么是flase
-
关系表达式 经常用在 if 结构的条件中或循环结构的条件中
3.4 逻辑运算符
-
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值
-
说明逻辑运算规则
-
a & b:叫逻辑与---当a和b同时为true,则结果为true,否则为false
-
a && b: 叫短路与---当a和b同时为true,则结果为true,否则为false
-
a|b:叫逻辑或---当a和b有一个为true,则结果为true,否则为false
-
a||b:叫短路或---当a和b有一个为true,则结果为true,否则为false
-
!a:叫取反,非运算---当a为true,则结果为false,当a为false,则结果为true
-
a^b:叫逻辑异或---当a和b不同时,则结果为true,否则为false
-
&& 和 & 的使用区别
-
&& 短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
-
& 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
-
开发中,我们使用的基本是短路与&&,效率高
-
-
||和|的使用区别
-
||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
-
|逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
-
开发中,我们基本使用短路或,效率高
-
-
3.5 赋值运算符
-
赋值运算符就是将某个运算后的值,赋给指定的变量
-
赋值运算符的分类
-
基本赋值运算符 =
-
复合赋值运算符 +=,-=,*=,/=,%= 等
-
a += b ----等价 a = a + b;
-
a -= b ----等价 a = a - b;
-
-
-
赋值运算符特点
-
运算顺序从右往左 int num = a + b + c;
-
赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
int num = 20; int num2 = 78 * 34 -10; int num3 = a;
-
复合赋值运算符等价于下面的效果
比如: a += 3; 等价于 a = a + 3;
-
复合赋值运算符会进行类型转换
byte b = 2; b += 3; b++;
-
3.6 三元运算符
-
条件表达式?表达式1:表达式2;
-
运算规则
-
如果条件表达式为true,运算后的结果是表达式1;
-
如果条件表达式为false,运算后的结果是表达式2;
-
-
三元运算符使用细节
-
表达式1和表达式2应当为可以赋给接收变量的类型(或可以自动转换/或者强制转换)
-
三元运算符可以转成if--else语句
-
3.7 运算符优先级
-
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
-
只有单目运算符,赋值运算符是从右往左运算的
3.8 标识符的命名规则和规范
3.8.1 标识符概念
-
Java对各种变量、方法和类等命名时使用的字符序列称为标识符
-
凡是自己可以起名字的地方都叫标识符 int num1 = 90;
3.8.2 标识符的命名规则
-
由26个英文字母大小写,0-9,_ 或 $ 组成
-
数字不可以开头。 int 3ab = a;
-
不可以使用关键字和保留字,但能包含关键字和保留字。
-
Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
-
标识符不能包含空格。int a b = 90;
3.8.3 标识符命名规范
-
包名:多单词组成时所有字母都小写:aaa.bbb.ccc//比如 csdn.net.xxx
-
类名、接口多:多单词组成时,所有单词的首字母大写:XxxYyyZzz 比如: StyJavaLang
-
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写 如:styJavaLang
-
常量名:所有字母都大写。多单词时每个单词用下划线连接
比如:定义一个所得税率 TAX_RATE
3.9 键盘输入
-
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器,就是Scanner
-
步骤:
-
导入该类的所在包,java.util.*
-
创建该类对象(声明变量)
-
调用里面的API
-
3.10 二进制
-
二进制: 0B & 0b 开头
-
二进制转十进制-----从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,在求和
-
十进制转二进制-----将该数不断除以2,知道商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
-
二进制转八进制-----从低位开始,将二进制数每三位一组,转成对应的八进制数即可
-
二进制转十六进制---从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
-
-
八进制: 0 & 0o 开头
-
十进制: 0D & 0d 开头
-
十六进制: OX & 0x 开头
3.11 位运算符
3.11.1 原码、反码、补码
-
二进制的最高位是符号位:0表示正数,1表示负数(口诀:0 -> 0 1 -> -)
-
正数的原码、反码、补码都一样(三码合一)
-
负数的反码=它的原码符号位不变,其他位取反(0 -> 1,1 -> 0)
-
负数的补码=它的反码+1,负数的反码=它的补码-1
-
0的反码、补码都是0
3.11.2 位运算符
-
java中有7个位运算(&、|、^、~、>>、<<、>>>)
-
按位与 &、按位或|、按位异或^、按位取反~
-
按位与& :两位全为1,结果为1,否则为0
-
按位或| :两位有一个为1,结果为1,否则为0
-
按位异或^ :两位一个为0,一个为1,结果为1,否则为0
-
按位取反~ :0 -> 1,1 -> 0
-
-
算术右移 >> 、算术左移 << 、逻辑右移(无符号右移) >>>
-
算术右移 >> :低位溢出,符号位不变,并用符号位补溢出的高位
-
算术左移 << :符号位不变,低位补0
-
逻辑右移(无符号右移) >>> :低位溢出,高位补0
-
特别说明:没有 <<< 符号
-
int a = 1 >> 2 -> 1 / 2 / 2 = 0
-
int a = 1 << 2 -> 1 * 2 * 2 = 4
-
-