一、什么是Java
Java是一种编程语言
二、应用场景
非windows平台下互联网环境的开发首选
三、Java语言特点
1、应用面广 2、简单易学(相对于C/C++) 3、面向对象(更符合我们看待事物的特点) 4、跨平台(一处编译,处处运行) 5、多线程(提升系统性能) 单线程 6、安全性 7、免费开源 8、分布式
四、Java开发环境准备
1、JDK安装: JDK1.82、Eclipse:IDE工具3、JDK JRE JVMJDK是Java开发工具箱,包括了JREJRE是Java运行时环境,不包括开发工具JVM是Java虚拟机,执行class文件
五、常见的开发工具
1、javac编译器: Hello.java--->Hello.class2、java解释器: 代码的解释执行3、javadoc文档生成器: 在java源程序中通过@...添加文档注释,然后再生成 HTML 格式的文档,用于团队的合作开发
六、编程
程序=算法+数据结构
1、Java是一种面向对象的编程语言,所以开发程序的开始就是定义类的开始
2、Java是一种编译执行或者解释执行的编程语言,先编写源程序,然后进行编译形成字节码文件(.class),最后使用解释器解释执行
3、class文件具备扩平台性
原因:针对不同的平台有对应的解释器
4、编写规范public class Hello{ // public class用于定义公共类,要求类名称和存放源代码的文件名称必须一致,包括大小写。例如存放文件的名称为hello.java,则编译出错。public static void main(String[] args){ //main方法是程序的执行起始点,一个类中可以定义多个方法,但是main是所有方法开始执行的位置,这个方法的签名不允许进行修改。如果方法名称写错,将不能执行,编译通过。 System.out.println(“Hello Java”); //这条语句用于在控制台上直接输出显示双引号中的内容。注意:这里的标点符号都是英文符号,语句末尾使用分号表示结尾。}
}
5、编译
将.java文件转化为二进制的class文件
javac Hello.java
生成.class的二进制文件后,则可以通过解释器解释执行
java Hello 注意:这里是类名称,不是文件名称
6、如果使用IDE工具则不需要手工的编译等操作,而且一般的IDE工具可以进行语法检查,如果发现语法错误则会采用红色的叉进行提示,要求编程人员进行修改
七、注释
Java代码中的注释:从软件工程的角度上说,一个源程序中20%-30%的编码量为注释是合理的;如果不写注释是不建议Java语法中提供了3种注释:注释是供程序员阅读的,用于对代码进行说明,从而避免需要了解方法的功能时,还需要进行代码阅读的限制,
偶尔用于开发中,阻止一段代码的执行。注释在代码编译时会自动被编译器所忽略1、单行注释 //注释文本2、多行注释 /*注释内容*/3、文档注释 /**注释内容*/ 可以通过javadoc命令生成html文档
八、一个公共的类存放在同名称的文件中,一个文件可以存放多个类定义,但是只能有一个和文件名称相同的public class
1、Java是一种自由格式的语言,可以用任意个空格、制表符、换行符隔开每个词
2、同时也允许将多行代码写在一行上,注意使用分号隔开;所有的语句末尾以分号;收尾
3、一般建议使用通用习惯的格式存放文件。
先随便格式进行定义,然后使用【ctrl+shift+F】快捷键对代码进行格式化处理
4、常见的编程错误:
目前的要求:将所有的程序都必须写在方法内部,不能写在方法外 (目前要求)
5、使用临时变量,Java 要求必须是先定义后使用,必须是先赋初值后使用
九、Java标识符
1、一定要遵守最基本的编程规范,目前讲解的规范按照SUN并参考ali的规范进行定义,入职后记得就近原则
2、给编程中的要素进行命名的规则,赋予变量、类或方法的名称。变量、函数、类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标识符
3、标识符可从一个字母(Unicode编码字符集)、下划线_或美元符号$开始,随后也可跟数字、字母、下划线或美元符号
4、报错原因:数字开头
5、命名方式合法,因为这里的字母采用的是Unicode编码字符集中的字母,全世界范围内的语言都基本提供支持。
标识符区分大小写,没有长度限制,可以为标识符取任意长度的名字
6、报错的原因是因为在Java中区分名称采用的是区分大小写的方式,这里k和K系统识别为两个不同的东西
7、有效的标识符:
identifier 、 thisone
UserName 、 User_name
_system_varl 、 $ max
这里需要注意的是一般不建议使用_或者$开头,但是从语法的角度上说,这是允许的。
8、有关关键字值得我们注意的地方:不允许使用关键字或者保留字
关键字:在语法中具备特殊含义的单词
保留字:没有在语法中定义特殊含义,但是不允许用户使用的单词
true、false和null为小写,而不是象在C++语言中那样为大写。严格地讲,它们不是关键字,而是文字。然而,这种区别是理论上的 goto和const不是Java编程语言中使用的关键字,但是这两个单词属于保留字
十、变量
1、什么是变量
变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域三个部分。
(1)Java是一种强类型编程语言,也就是说定义变量时必须指定对应的数据类型数据类型指明变量或表达式的状态和行为
(2)数据类型决定了数的取值范围和运算符号
(3)作用域决定了变量名称的有效范围,Java要求变量必须先声明后使用
2、非法的变量名
3max (变量名不能以数字开头) room# (包含非法字符“#”) class (“class”为保留字)user name (报错,因为标识符中不能出现空格)
3、变量命名的规范
(1)、必须遵守的规范(标志符)
1>只能由字母,数字,$,下划线_四种符号组成
2>不能以 数字 开头
3>不能使用Java中的关键字(写在代码里会变颜色的叫关键字)
(2)、建议遵守规范
1>变量的命名,遵循小驼峰命名法,首字母小写,后面连续的单词,每个单词首字母大写
例:【HelloWord】
2>变量的命名要具有实际含义
3>尽量不要使用中文
十一、八种基本类型和引用类型
1、整数类型
(1)、byte 字节类型, 1个字节 8位, 取值范围:-2^7— >2^7-1(-128–>127)
(2)、short 短整型 , 2个字节 16位, 取值范围:-2^15–> 2^15-1 (-32768–32767)
(3)、int(Java整数默认类型) , 4个字节 32位 (-2147483648–2147483647),取值范围:-2^31–> 2^31-1
(4)、long 长整型, 8个字节 64位 , 取值范围:-2^63–> 2^63-1
(5)、出错的原因是超出允许存储的范围
(6)、所有Java编程语言中的整数类型都是带符号的数字,不存在无符号整数。整数类型的文字可使用二进制、十进制、八进制和十六进制4种表示方式。
(7)、二进制、十进制、八进制、十六进制
二进制整数,以0b或者0B开头,例如0b1001001
十进制整数,如123,-456,0
八进制整数,以0开头,如0123表示十进制数83,-011表示十进制数-9。
十六进制整数,以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18
2、浮点数类型
两种浮点类型 float和 double
浮点数无法准确存放,所以浮点数不能进行等值判断
(1)、float
4B 单精度浮点数 7-8有效数据 E38
解决方法:在123.456后添加f或者F,表示是单精度浮点数
(2)、double
4B 单精度浮点数 7-8有效数据 E38(系统默认浮点数是double类型)
(3)、如果一个数包括小数点或指数部分或者在数字后带有字母F或f(float)、D或d(double),则该数为浮点数
表示浮点数有2种计法: 十进制数形式。由数字和小数点组成,且必须有小数点,如0.123, 1.23, 123.0
科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。
例如12.3e-5含义是12.3X10-5
3、char 字符类型
(1)、使用char类型可表示单个字符,字符是用单引号括起来的一个字符【强调:不能使用双引号,使用双引号就是字符串类型】, 这个字符可以是unicode编码字符集中的任意字符
(2)、Java中的字符型数据是16位(2B)无符号型数据,它表示Unicode编码表,而不仅仅是ASCII集。其范围为0~65535
Unicode所定义的国际化字符集能表示迄今为止人类语言的所有字符集,它要求使用16位的宽度表示。没有负数的char
Unicode字符的使用对于英语、德语、西班牙语或法语的语言是有些低效,因为这些语言能够被包含在8位内。但是为了程序的的可移植性和通用性,付出代价是很有必要的
计算机处理字符类型时,是把这些字符当成不同的整数来看待。因此。严格说,字符类型也算是整数类型的一种
(3)、数据类型转换
4、Java也提供转义字符,以\开头,将其后的字符转变为另外的含义。
"\ddd" 1-3位 8进制数 所表示的字符(ddd)
"\uxxxx" 1-4位 16进制数 所表示的字符 (0123456789abcdef)
" \' " 单引号字符
" \" " 双引号字符
" \\ " 反斜杠字符
注意:用双引号引用的文字,就是平时所说的字符串类型不是原始类型,而是一个类(class)String,它被用来表示字符序列
字符本身符合Unicode标准,且上述char类型的转义字符适用于String
可以把char当作整数数据来操作
5、boolean 逻辑类型
(1)、boolean数据类型有两种文字值:true【真】 和false【假】
在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
6、String 引用类型
(1)、能定义一个到多个字符,使用双引号引起来
(2)、字符串能和任何数据类型之间使用+做连接运算连接完之后的结果还是一个字符串
7、基本数据类型转换
数据类型按精度(取值范围)从低到高排列顺序为:byte,short,char,int,long,float,double。
(1)、当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型转换
(2)、当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算。
显示转换格式为: (目标类型名)要转换的值;
报错原因为double类型>int 类型,需要强制类型转换
注意:在大转小的转换过程中可能损失精度
(3)、浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
(int)23.7 = 23;
(int)-12.34f = -12;
8、数值后缀
(1)、长整型 long 右侧的值如果超出了 int 最大值范围,需要带L或者l。
(2)、单精度浮点float定义浮点数时后面必须带F或者f。
(3)、双精度浮点double定义浮点数时后面可以带上D或者d,也可以不带。
十二、运算符
1、算术运算符
+加(正值)、— 减(负数)、* 乘、/ 除、% 求余、++ 自加、-- 自减
(1)、++和- -
区别:
特殊点:
5/2=?
2、比较运算符
>大于、<小于、>= 大于等于、<=小于等于、==等于、!=不等于
(1)、计算结果为boolean类型的数据,表示条件是否成功
3、逻辑运算符
&&与、 ||或、 !非
(1)、&&
(2)、||
(3)、!
总结:非真即假,非假即真
(4)、1>短路与:表达式一 && 表达式二
如果已经判断了表达式一的值为false,那么表达式二的值,不论是true还是false,结果都是false,这时表达式二可以不参与计算(代码不执行)
2> 短路或:表达式一 || 表达式二
逻辑或运算如果已经判断了表达式一为true,那么表达式二的值无论是true或是false,结果都是true,这时表达式二可以不参与运算(代码不执行)
4、赋值运算符
=,+=,-=,*=,/=,%=
K=5表示将5这个值或者这个位置上表达式计算结果赋给变量K中进行存储
a+=5表示的意思是a=a+5的简化写法,另外-= *= /= %=含义类似
考点:
报错原因:因为1默认是int类型,所以计算时k会自动转换为int类型进行计算,计算结果 101 为int类型,将大类型赋值给short小类型,必须进行强制类型转换
修改方法:
5、三目运算符
规则是完全一致的,使用的形式是: x ? y : z ;
X是一个条件表达式,如果结果为真,则返回表达式y的计算结果,否则返回表达式z的计算结果
6、位运算符 【不做要求】
&与、|或、^异或、~取反、<<右移位计算 、 >>左移位计算、>>>无符号移位
计算2*8最快速的计算方法
2<<3
7、其他运算符
(1)、对象运算符 instanceof 用来判断一个对象是否是某一个类或者其子类的实例。如果对象是该类或者其子类的实例,返回ture;否则返回false
(2)、判断k是否为Integer类型,如果是则返回为true,否则为false
(3)、运算符 用于访问对象实例或者类的类成员函数
new运算符 用于创建一个新的对象或者新的数组
8、运算符优先级
9、结构化编程
结构化程式设计(英语:Structured programming)是 1960 年代开始发展起来的一种编程典范。它采用子程序、 程式码区块、for 循环以及 while 循环等结构来取代传统的 goto。希望借此来改善计算机程序的明晰性、品质以 及开发时间,并且避免写出面条式代码。
已经证明,任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构
设计方法:使用流程图表示算法
1>、圆角矩形表示“开始”与“结束”。
2>、矩形表示行动方案、普通工作环节用
3>、菱形表示问题判断或判定(审核/审批/评审)环节
4>、用平行四边形表示输入输出
5>、箭头代表工作流方向
结构化程序设计原则:
自顶向下、逐步求精、模块化。典型案例:把大象装到冰箱中
结构化程序设计还有一个重要的规定,那就是只能使用顺序结构、选择结构、循环结构这三种基本结构(或由它们派生出来的结构)来定义程序的流程
选择结构: if/else switch/case
1、if/else
1、if(布尔表达式){ //代码
}
布尔表达式为true,执行大括号中代码
为false,跳过执行大括号中代码2、if(布尔表达式){ //代码
}else{ //代码
}
布尔表达式为true,执行if后面大括号中代码
为false,执行else后面大括号中代码3、if(布尔表达式一){ //代码
}else if(布尔表达式二){ //代码
}
…………
else{ //这个可以省略不写//代码}
从上往下逐一判断布尔表达式的值,只要其中有一个为true,就会执行后面对应大括号中的代码,执行完后跳出整个分支判断,后面布尔表达式不再判断
2、switch/case
Switch条件表达式返回的数据类型:int、short、byte、char、String类型或者Enum枚举类型,否则会报错
switch (条件表达式) { //这个表达式应该可以计算出一个具体的结果值 case 值1: 当结果值为值1的时候,执行【操作 1 的语句】,执行完成后的break表示跳出switch,如果没有break语句,则继续向下执行,但是不再进行判定 操作 1 的语句; break; case 值2: 代码2; break; ...... case 值n: 代码n; break; default : //可以省略 默认语句; }
总结:if可以用于各种条件判断执行情况下,但是switch只能用于等值判断,所以要求switch中的表达式计算结果必须是有限个离散点,否则不能使用switch