承接上篇:java 概述
2.0java程序开发体验
2.0.1编写java程序的步骤
编写一个以java为扩展名的java文件,并经过javac.exe的编译命令进行编译“javac java文件名”,生成java的可执行文件(扩展名为class文件,此文件不可双击执行,是中间码文件或字节码文件),执行命令为java.exe,调用JVM,使用“java 字节码文件名”执行class文件
2.0.2Helloworld的含义
Hello world:代表学习计算机语言的第一个入门小程序,现在泛指接触新事物的第一步。
class:是java中的关键字,用于定义类,java语言的程序代码都需要定义在类中。
关键字:被java语言赋予特殊含义的单词(小写)。
2.0.3classpath设置寻找类文件(class文件)的路径
classpath设置的是寻找类文件(class文件)的路径,(在使用包时配置比较有用,java可执行文件)
set classpath=.;路经(.表示在当前路径下寻找)
当设置classpath路径时,有分号代表在classpath路径找完后再回去当前路径下寻找;没有分号代表只在classpath路径下寻找(最好不要加分号)。(没有分号就是没有结束)
例如:setclasspath=.c:\;d:\ 设置classpath多路径查找,当前、c盘、d盘
2.0.4javac和java命令查找顺序的比较
javac.exe命令的寻找路径顺序是先从当前路径查找,后从path环境变量下查找;
java.exe命令的寻找路径顺序是先从classpath路径开始寻找,后从当前路径下寻找(如果在配置classpath路径后面加分号的话)。
2.0.5类文件的规范写法
规范不是规则,可以遵守,但是大家都是习惯这样用,所以应当遵守;
类名通常由单词组成,首字母大写,多个单词组成时,每个单词的首字母都要大写(XxxYxxZxx),名称有意义,增加阅读性;
类的区间使用大括号表示;{类的内容(代码书写因具有阶梯层次性,使用Tab键标识)}
2.0.6Java中主函数的作用
Java中主函数的作用就是保证类的独立运行(程序的入口)。java.exe命令去调用虚拟机,虚拟机去调用底层类的主函数public static void main(String[] args)中的main方法
2.0.7java文件存储时注意的扩展名
Java文件在存储的时候要特别注意一下,那个文件的扩展名的属性最好把隐藏扩展名的属性给关闭。
2.1关键字
2.1.1定义
被java语言赋予了特殊含义的单词
2.1.2特点
关键字中所有字母为小写
2.1.3分类
1、用于定义数据类型的关键字:
class、interface、byte、short、int、long、float、double、char、boolean、void
2、用于定义数据类型值的关键字:
true、false、null
3、用于定义流程控制的关键字:
if、else、switch、case、default、while、do、for、break、continue、return
4、用于定义访问权限修饰符的关键字:
private私有、protected保护、public公有
5、用于定义类、函数、变量修饰符的关键字:
abstract、final、static、synchronized
6、用于定义类与类之间关系的关键字:
extends、implements
7、用于定义建立实例及引用实例、判断实例的关键字:
new、this、super、instanceof
8、用于异常处理的关键字:
try、catch、finally、throw、throws
9、用于包的关键字:
package、import
10、其他修饰符关键字:
native、strictip、transient、volatile、assert
11、Java有没有goto?
java中的保留字,现在没有在java中使用
2.1.4 main不是关键字
main不是关键字,但是它是一个被虚拟机所识别的一个名称,是JVM程序的入口。
2.2标识符
2.2.1标识符定义
在程序中自定义的一些名称,如:类名。
2.2.2标识符的组成元素
由26个英文字母大小写;数字:0-9;符号:_(下划线)和$(美元符号)组成。
2.2.3定义合法标识符规则(必须遵守)
(1) 数字不可以开头
(2) 不可以使用关键字
2.2.4Java中严格区分大小写
注意:起名字时尽量起的有意义,提高阅读性。
2.2.5Java中的名称规范
(1) 包名:多单词组成是,所有字母都小写。
如:xxxyyyzzz
(2) 类名接口名:多单词组成时,所有单词首字母大写。
如:XxxYyyZzz
(3) 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始的所有单词首字母大写
如:xxxYyyZzz
(4) 常量名:所有字母都大写,多单词时用下划线连接
如:XXX_YYY_ZZZ
2.3常量
2.3.1常量的定义
常量表示不能改变的数值
2.3.2Java中常量的分类:
(1) 整数常量:所有的整数
(2) 小数常量:所有的小数
(3) 布尔型常量:较为特殊,只有true和false两个值
(4) 字符常量:将一个数字字母或者符号用单引号(‘’)标识
(5) 字符串常量:将一个或多个字符用双引号标识,如“”为空串
(6) null常量:只有一个数值就是null(引用类型)
2.3.3对于整数java有四种表示形式
(1) 二进制:0、1,满2进1
(2) 十进制:0-9,满10进1
(3) 八进制:0-7,满8进1,有0开头表示
(4) 十六进制:0-9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15),满16进1,有0x开头表示(大小写无关)
2.3.4二进制
1、 计算机里存储的都是二进制数据,来表示信息。
2、 八个二进制位表示一个字节
3、 负数的二进制表现形式为:其正数二进制取反加一
4、 负数的最高位是1(取反而来),正数的最高位是0
2.3.5进制之间的转换方式:
(1) 十进制向二进制转换就是除以2的过程
(2) 二进制向十进制转换就是乘以2的过程
(3) 八进制与十进制向其他进制转换的时候需要先转向二进制再转换其他进制。
2.4变量
2.4.1变量的概念(将不确定的数据进行存储)
(1) 内存中的一个存储区域
(2) 该区域有自己的名称(变量名)和类型(数据类型)
(3) 该区域的数据可以在同一类型范围内不断变化
2.4.2定义变量的作用
用来不断的存放同一类型的常量,并可以重复使用
2.4.3使用变量需要注意
(1) 变量的使用范围(也就是作用域)(一对{}之间有效)
(2) 变量必须初始化值
(3) 局部变量:定义在方法中以及参数中、for循环之中的变量(在栈内存中开辟空间)。
2.4.4定义变量的格式
数据类型 变量名 = 初始化值;
注意:格式是固定的,记住格式以不变应万变
理解:变量就如同数学中的未知数
2.4.5数据类型:(八个二进制位表示一个字节)
1、 Java语言是强类型语言,对于每一种数据都明确了具体的数据类型,在内存中分配了不同大小的内存空间
(1) 基本数据类型:
(a) 数值型
01、 整数类型:byte(1个字节,-128~127)、short(2个字节-32768~32767)、int(4个字节)、long(8个字节,天文数字)
02、 浮点类型:float(单精度,4个字节)、double(双精度,8个字节)
(b) 字符型:char(取值范围0~6535,2个字节)
(c) 布尔型:boolean(true、false)
(2) 引用数据类型:
(a) 类:class
(b) 接口:interface
(c) 数组:[]
2、 整数默认为int,小数默认为double
3、 定义long、float时需要标注一下,如:long x=3l;folat y=3f;
4、 当数据不确定的时候,需要对数据进行存储时候,就需要定义一个变量。(思想同样适用于C++)
5、 同一区间(就是一对大括号{}之内),定义的变量名字不能重复
6、 定义变量情况:当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作。
2.5类型的转换
2.5.1自动类型的转换(也叫隐式类型转换)
byte b = 3;//解释说明:整数3赋值给b时,会自动判断整数3(常量)是否在byte型范围内,在范围内,则自动转换,赋值成功;
b = b+2;//解释说明:b是一个变化的值(变量),加上一个整数2(常量),运算结果经过自动提升是个整数值,赋值给byte型,会提示损失精度,而报错。
2.5.2强制类型的转换(也叫显式类型转换)
b =(byte)(b+2);
2.5.3类型转换的原理
所占字节数的不同,存储变量的空间大小不一致
2.5.4什么时候用强制类型转换
(1) 当获取运算结果的整数部分时,需要将double型强制转换成int型
(2) 可以通过数字获取在ASCII码表中对应的字符,需要将int型强制转换成char型。
2.5.5表达式的强制类型提升(由底层自动完成提升)
(1) 所有的byte型、short型、char型的值被提升为int型
(2) 如果一个操作数是long型,计算结果就是long型
(3) 如果一个操作数是float型,计算结果就是float型
(4) 如果一个操作数是double型,计算结果就是double型
1、 int型4个字节,float型4个字节,它们之间自动提升为float型,因为float型含有小数部分。
2.5.6分析( ‘a’)与 (‘a’+1)的区别:
System.out.print(‘a’)打印结果是“a”;计算机本身可以将字符‘a’作为显示的效果打印。
System.out.print(‘a’+1)打印结果是“98”;而“‘a’+1”在做运算,字符‘a’占2个字节,整数1占4个字节,则字符‘a’则自动提升,提升之后的字符‘a’在ASCII码表中的对应的数字97就体现出来了,最后就是打印结果98
2.6运算符
2.6.1算术运算符
运算符 | 运算 | 范例 | 结果 |
+ | 正号(一般不写) | +3 | 3 |
- | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模 | 5%5 | 0 |
++ | 自增(前) | 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 |
+ | 字符串相加 | “He”+”llo” | “Hello” |
1、 当取模运算时,正负取决于被模数(左边),5%1=0,1%5=1,1%-5=1,-1%5=-1
2、 对于除号“/”,它的整数除和小数除是有区别的(类型的自动提升):整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x=3510;x=x/1000*1000;则x的结果是:3000
3、 “a++”的含义:++给a这个变量的值,进行一次加1操作,并将加1操作后的值重新赋给a;(其时a++ <==>a=a+1),当单独运算时(如运用到循环变量的控制时),++a和a++是一样的效果。
4、 理解“b=a++;b=++a,++是饭,a是小朋友”:谁在前,谁先干
5、 “+”除字符串相加功能外,还能把非字符串转换成字符串;例如:System.out.println(“5+5=”+5+5);打印结果:5+5=55
6、 字符串数据和任何数据相连接,结果都是字符串
7、 System.out.println(“打印内容”);“ln”表示在“打印内容”输出后换行。
2.6.2赋值运算符
1、 符号(分别为一个运算符):
=;+=;-=;/=;*=;%=;
2、 示例:
int a,b,c;a=b=c=3;同时为a,b,c赋值,不多见也正确。
int a=3;a+=5;等同运算a=a+5
3、 面试题思考:short s=3;s=s+2;s+=2;有什么区别?
(回答:s=s+2;编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法赋值给short类型;s+=2;编译成功,因为+=运算符在给s赋值时,自动完成了强转操作)
s=3;编译通过,因为这是一次赋值运算,会有一个自动转换的动作(判断是否在short型范围)。
s=s+2;编译不通过(自动提升),因为这是两次运算(先做加法运算,后做赋值运算) ,这之中没有自动转换的动作。
s+=2;编译通过,因为这是一次赋值运算(把两边的和赋值给左边),在这个过程中它会有个自动转换的动作,相当于s=3。
4、 区别:x=3;x+=4;
01、 int x = 3;表示把3(右边)赋值给x(左边)
02、 int x+=4;表示把x(左边)与4(右边)的和赋值给x(左边) 相当于x= x+4;
2.6.3比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | false |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
1、 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
2、 比较运算符“==”不能误写成“=”。
2.6.4逻辑运算符
运算符 | 运算 | 范例 | 结果 |
& | AND(与) | false&true | false |
| | OR(或) | false|true | true |
^ | XOR(异或) | false^true | true |
! | NOT(非) | !true | false |
&& | AND(短路与) | false&&true | false |
|| | OR(短路或) | false||true | true |
1、 逻辑运算符(也称为关系运算符)用于连接布尔型表达式,在java中不可以写成3<x<6,应该写成x>3 & x<6 。
2、 “&”和“&&”的区别:
01、 单&时,左边无论真假,右边都进行运算;
02、 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
3、 “|”和“||”的区别同理:
01、 单或时,左边无论真假,右边都参与运算;
02、 双或时,如果左边为真,右边不参与运算
4、 异或(^)与或(|)的不同之处是:当(^)左右都为true时,结果为false。
5、 &(逻辑与:有假必假):两边的boolean型的表达式有一个为false,这结果就为false,只有两个都为true时才为true
6、 |(逻辑或:有真必真):两边的boolean型的表达式有一个为true,则结果就为true,只有两个都为false时才为false
7、 ^(逻辑异或:同假异真)
8、 !(逻辑非:真假相反)
例如:!true=false; !!true=true;s
2.6.5位运算符
运算符 | 运算 | 范例 | 规律 | ||
<< | 左移 | 3<<2=12 à3*2*2=12 | 3乘以2的左移位数次幂 | ||
>> | 右移 | 3>>1=1 à3/2=1 | 3除以2的右移位数次幂 | ||
>>> | 无符号右移 | 3>>>1=1 à3/2=1 | 二进制运算 | ||
& | 与运算 | 6&3=2 | 0为false1为true逻辑运算 | ||
| | 或运算 | 6|3=7 | 0为false1为true逻辑运算 | ||
^ | 异或运算 | 6^3=5 | 0为false1为true逻辑运算 | ||
~ | 反码 | ~6=-7 | 正负数的反码是相应的负正数减一,0的反码-1 |
位运算符的细节特点 | ||||
<< | 空位补0,被移除的高位丢弃,空缺位补0 。 | |||
>> | 被移位的二进制最高位是0,右移后,空缺位补0 被移位的二进制最高位是1,右移后,空缺位补1 | |||
>>> | 被移位的二进制最高位无论是0或是1,空缺位都用0补 | |||
& | 二进制位进行&运算,只有1&1时结果是1,否则是0 。 | |||
| | 二进制位进行|运算,只有0|0时结果是0,否则是1 。 | |||
^ | 任何相同二进制位进行^运算,结果是0:1^1=0,0^0=0; 不相同二进制位^运算结果是1:1^0=1,0^1=1 。 |
位运算是直接对二进制进行运算
1、 在做乘除法运算时,位移运算是速度最快的,但是有一定的局限性,就是以2的倍数增加或减少。
2、 小技巧:在做二进制的逻辑运算时,将0视为false,将1视为true,使用逻辑运算的口诀,就比较快。
3、 负数的二进制表现形式:相应的正数二进制取反加一。
4、 反码求解口诀:正数的反码是负数减1;负数的反码是正数减1;0的反码是-1
5、 ^异或:任何相同二进制位进行^异或运算结果为0,不同二进制位进行^异或运算结果为1;1个数^异或同一个数两次,这结果还是原来那个数;(应用于加密算法)
6、 练习:
01、 最有效率的方式算出2乘以3等于几?
2<<3;
02、 对两个整数变量的值进行互换的不同方法
01、 使用第三方变量(在实际开发中应用最多的);
02、 n=3;m=8;n=m+n;m=n-m;n=n-m;
(缺陷就是当n和m非常大时,有可能超出int型的范围);
03、 n=n^m;m=n^m;//解释(n^m)^m;n=n^m//解释n^(n^m)(是一种技巧型方式)
03、 用移位操作获取进制的数据转换:(例十六进制)
思路:在求一个数的十六进制的时候,就是在获取它这个32位二进制中的每4位,
程序及说明如下:
//获取60的最低四位,通过&15;
int num=60;int n1=num&15;
//通过判断大于9来确定字母表示
(n1>9)?(char)(n1-10=’A’):n1
//要获取下一组四位,将60右移四位;使用无符号右移(高位补零)就是将所有的二进制位移完
int temp=60>>>4;
int n2=temp&15;
//重复对temp值进行最低四五位的获取,通过&15;
System.out.println((n2>9)?(char)(n2-10=’A’):n2);
2.6.6三元运算符
1、 格式:
(条件表达式)?表达式1:表达式2;
01、 如果条件为true,运算后的结果为表达式1
02、 如果条件为false,运算后的结果为表达式2
2、 示例:
获取两个数中的大数
01、 int x=3,y=4,z;
02、 z=(x>y)?x:y; //z变量存储的就是两个数的最大数
3、 表达式:就是具有一定语法规则的语句。
4、 三元运算符是一个三个元素参加运算的,最后一定有一个结果。
5、 在运算的过程中三个元素的类型转换会一致,可能会发生自动提升或强转。
2.7注释
2.7.1注释作用
(注释不要过密,导致中英文混合,阅读性差):
(1) 注解,解释,说明
(2) 调试程序
(3) 注释出不懂的地方,方便提问
2.7.2注释的类型
(1) 单行注释(可以嵌套使用)://注释内容
(2) 多行注释(不可嵌套使用,可以扩大其注释的范围):
/*
注释内容
*/
(3) 文档注释(java语言的特有注释):对程序进行说明后,可以通过JDK当中的另外一款工具“javadoc.exe”将java程序当中的文档注释提取出来,形成一个网页,这个网页就是所写程序的说明书(给开发者看的说明书)。格式为: /**
作者、版本、作用
*/
2.7.3写代码的同时一边写注释,要养成习惯
(1) 类上面加的都是文档注释
(2) 函数上面加的都是文档注释
(3) 若修饰符改变的话会加多行注释
(4) 代码当中的某几句话比较关键、难懂,使用单行注释,切记不要每一行都要加单行注释,易导致阅读性差
2.7.4注释的书写规范
开头应当先写注释,写出文档的思路及步骤:
/**
需要:
思路:
步骤:
*/ 这样书写显得专业,内行。多行注释之中可以添加单行注释,不可添加多行注释。
8、 代码是思想的一种体现形式。
2.8转义字符
2.8.1转义字符的定义
通过 “\” 来转变后面的字母或符号的含义。转义字符也是字符。
2.8.2转义字符的种类
(1) “\n”:换行(在linux系统中换行用一个字符表示“\n”;在DOS下直接能识别“\n”)
(2) “\b”:退格(相当于Backspace键)
(3) “\r”:按下回车(在windows系统中换行一般有两个字符表示“\n”和“\r”;)
(4) “\t”:制表符(相当于Tab键)
(5) “\””:双引号(转义字符“\”要放在被转义字符之前)
(6) “\’”单引号(可以表示为char ch=’\’’;单引号字符赋值给ch)
(7) “\\”斜线(可以表示为char ch=’你’;因为一个汉字占用两个字节,char型也占两个字节)