1
Java编程基础
1.1
变量
1.1.1
变量
变量是什么?为什么为用变量?
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据
。
变量分类:
Ø
按所属的数据类型划分:
基本数据类型变量
引用数据类型变量
Ø
按被声明的位置划分:
局部变量:方法或语句块内部定义的变量
成员变量:方法外部、类的内部定义的变量
特别注意:类的外面不能有变量的声明
1.1.2
数据类型
布尔型----
boolean 1字节true/false
字符型---- char
2字节
1.1.3
二进制
Ø
计算机中的数据都以二进制数字保存。
Ø
二进制:逢二进一。即只有0、1两个值。
如:十进制的10在计算机内保存为二进制的1010
Ø
计算机中信息的存储单位
位(Bit):表示一个二进制数码0或1,是计算机存储处理信息的最基本的单位。
字节(Byte):一个字节由8个位组成。它表示作为一个完整处理单位的8个二进制数码。
l
补码:
事实上,计算机内的二进制数值是以补码形式表示的。
补码:
一个正数的补码和其原码的形式是相同的。
负数的补码是:将该数的绝对值的二进制形式,按位取反再加1。
由此可知,二进制补码数值的最高位(最左位)是符号位:该位为0,表示数值为正数;该位为1,表示数值为负数。
10 =
00000000 00000000 00000000 00001010
-10 =
11111111 11111111 11111111 11110110
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
l
二进制和十进制之间的互换
二进制数转换成十进制数
按权相加:把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
例:原码1011.01 = 1×23+0×22+1×21+1×20+0×2-1+1×2-2
=
8+0+2+1+0+0.25
=11.25
十进制转换成二进制
整数部分:"除2取余,逆序排列"法
小数部分:"乘2取整,顺序排列"法
2 89
2 44 … 1
2 22 … 0
2 11 … 0
2 5 … 1
2 2 … 1
2 1 … 0
0 … 1
891011001
0.625
X 2
1.25
X 2
0.5
X 2
1.0
0.6250.101
l
十六进制
二进制表示法太冗长,所以在程序中一般喜欢用十六进制。
十六进制:基数为十六,逢十六进一。它用abcdef表示从0-9之上的值。
Java中十六进制数据要以0x或0X开头。如:0x23D
十六进制转换成二进制只需将每个十六进制数字替换为相对应的四个二进制位即可。
二进制
十六进制
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F
l
八进制
八进制:基数为八。
Java中八进制数据要以0开头。如:0123
八进制转换成二进制:只需将每个八进制数字替换为相对应的三个二进制位即可。
现在的计算机系统很少用八进制的了。
二进制
八进制
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7
1.1.4
标识符
Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
Java标识符命名规则:
l
由字母、数字、下划线(_)和美元符号($)组成。
l
不能以数字开头。
l
区分大小。
l
长度无限制。
l
不能是Java中的保留关键字。
标识符命名习惯:见名知意。
示例:
合法标识符:HelloWord、username2、user_name、_userName、$abc_123
非法标识符:2UserName、user#Name、Hello World、class
1.1.5
类型转换
boolean 类型不能转换成任何其它数据类型。
自动类型转换:容量小的类型自动转换成容量大的数据类型
byte,short,int
-> long ->float ->double
byte,short,int不会互相转换,它们三者在计算时会转换成int类型
强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符
long l =
100L;
int i =
(int)l;
有可能造成精度降低或数据溢出,使用时要小心。
1.2
基本语法格式
1.2.1
关键字
Java中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword)。全部是小写。
保留字:没有定义用途,但保留备用。
goto、const
检查下面这些是否是合法的变量名:
1.2.2
常量
常量:程序中持续不变的值,它是值不能改变的数据。
整型常量:123
Java语言整型常量的三种表示形式:
十进制整数:如12, -314,
0。
八进制整数:要求以0开头,如0123表示八进制的123 。
十六进制数:要求0x或0X开头,如0x123。
浮点数(实型)常量:3.14
字符常量:‘a’、‘\t’、‘\u0035’
布尔(逻辑)常量:true、false
字符串常量:“a”、“hello world”
null常量:表示对象的引用为空
注意:
区分字符常量和字符串常量
“常量”还会用在另外语境中表示值不可改变的变量
1.2.3
转义字符
1.3
运算符
运算符包括:算术,赋值,关系,逻辑,位,移位,连接,三目等运算符
算术运算符:+ 、 - 、 * 、 / 、 % 、 ++ 、 --
赋值运算符:= 、 += 、 -= 、 *= 、 /= 、 %=
关系运算符:> 、 < 、 >= 、 <= 、 == 、 !=
逻辑运算符:! 、 & 、 | 、 ^ 、 && 、 ||
位运算符:& 、 | 、 ^ 、 ~ 、 >> 、 << 、 >>>
字符串连接运算符:+
1.3.1
算术运算符
++:如果是前缀:先对此变量加1,再执行其他的操作。
如果是后缀:先执行其他的操作,再对此变量加1
--:同理。
键盘输入:Scanner input=new
Scanner(System.in);
练习:
1.
通过键盘输入声明初始化一个圆柱体的高和底面半径,pai值是3.14,求圆柱体的体积,
并显示输出圆柱体的体积;
π(r^2)h
2.
通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据.
3.
任意定义一个五位整数,求各个位上的数的和!
4.
根据天数(46)计算周数和剩余的天数,天数是通过键盘输入。
5.
实现一个数字加密器,加密规则是:
加密结果 =
(整数*10+5)/2 + 3.14159
加密结果仍为一整数
1.3.2
赋值运算符
赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左
1.3.3
关系运算符
关系运算符作用是比较两边的操作数,结果总是boolean型的。
1.3.4
逻辑运算符
逻辑运算符用于对boolean型结果的表达式进行运算,运算结果总是boolean型,后面结合条件结构讲解。
1.3.5
位运算符
位运算符对两个操作数中的每一个二进制位都进行运算
位运算符功能
按位取反 ~
按位与 &
按位或 |
按位异或 ^
1.3.6
移位运算符
左移:"a<
带符号右移:"a>>b;
"将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
无符号右移:"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0
2227 =
00000000 00000000 00001000 10110011
2227<<3
=
00000000 00000000 01000101 10011000
2227>>3
=
00000000 00000000 00000001 00010110
2227>>>3
=
00000000 00000000 00000001 00010110
-2227 =
11111111 11111111 11110111 01001101
-2227<<3
=
11111111 11111111 10111010 01101000
-2227>>3
=
11111111 11111111 11111110 11101001
-2227>>>3
=
00011111 11111111 11111110 11101001
String s="He" +
"llo"; 结果"Hello"
"+"除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。
如:String s="x" +
123; 结果"x123"
1.3.8
三目运算符
X ? Y : Z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
例:
int score =
75;
String type = score >=60
? "及格" :
"不及格";
运算符的优先次序
表达式的运算按照运算符的优先顺序从高到低进行,同级运算符从左到右进行:
优先次序
运算符
1
. [] ()
2
++ -- ! ~ instanceof
3
new (type)
4
* / %
5
+ -
6
>> >>> <<
7
> < >= <=
8
= = !=
9
&
10
^
11
|
12
&&
13
||
14
?:
15
= += -= *= /= %= ^=
16
&= |= <<= >>=
>>>=
1.4.1
条件语句
if条件结构是根据条件判断之后再做处理
if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if (条件语句){…}else if(条件语句){…}else{…}
&,|,^,&&,||,!
例子:男大当婚女大当嫁。。。。。。
switch
switch(表达式){
case 取值1: 语句块1;break;
case 取值n: 语句块n;break;
default: 语句块n+1;break;
}
switch语句有关规则
表达式的返回值必须是下述几种类型之一:int, byte, char,
short,确定的结果;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下面执行!
Case后面的执行体可写{ }也可以不写{ }
例:
令狐冲参加比武大会
如果获得第一名,将出任武林盟主
如果获得第二名,将出任武当掌门
如果获得第三名,将出任峨嵋掌门
否则,将被逐出师门
实现示例:
输入赵本山的考试成绩,显示所获奖励
成绩==100分,爸爸给他买辆车
成绩>=90分,妈妈给他买MP4
90分>成绩>=60分,妈妈给他买本参考书
成绩<60分,什么都不买
实现示例:
张三为他的手机设定了自动拨号
按1:拨爸爸的号
按2:拨妈妈的号
按3:拨爷爷的号
按4:拨奶奶的号
编程实现此业务
练习:
1.
Java成绩大于90分,而且音乐成绩大于80分,奖励他手机一个;或者Java成绩等于100分,音乐成绩大于70分,也可以奖励他汽车一部。
2.
要求用户输入两个数a、b,如果a能被b整除或a加b大于1000,则输出a,否则输出b
3.
如果我中了500万我做什么,没有中我做什么。
4.
登录系统取钱。
5.
判断闰年
6.
购物打折
7.
判断一个数的奇数,偶数
8.
多分支月份选择天数
9.
9.判断质数。
(质数或素数:就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数或素数)
1.4.2
循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定代码
循环语句分类
for 循环
while 循环
do/while 循环
(一)
while循环
符合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
语法:
while(条件表达式){
//语句块;
}
实现示例:
为了备战,令狐冲锲而不舍地练习,盈盈严格把关…
“盈盈,怎么样,可以了吗?”
“不行,高音部分唱得还不是很好,钢琴还要继续练啊 !”
没有听到“很棒”的评价,看来革命尚未成功,
令狐冲并不气馁:
早上5点练声,上午练钢琴,下午到声乐老师家练习唱歌,晚上练习舞蹈基本功。
使用while循环的步骤
1、分析循环条件和循环操作
2、套用while语法写出代码
3、检查循环是否能够退出
System.out.print("表演得怎么样 ?(y/n):");
answer =
input.next();
while (! answer.equals("y"))
{
System.out.println("早上5点开始练声 !");
System.out.println("上午练习钢琴 !");
System.out.println("下午到声乐老师家练习唱歌 !");
System.out.println("晚上练习舞蹈基本功!");
System.out.print("表演得怎样
?(y/n):");
answer = input.next();
}
System.out.println("圆满完成 !");
录入班级人数和学员成绩,计算班级学员的平均成绩
while(i<=stuNum){
System.out.print("请输入学号" + i + "的成绩:");
score = input.nextInt();
sum = sum + score;
i++;
}
avg = sum / stuNum
;
2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
提示:1、循环条件和循环操作分别是什么?
2、int year = 2006;
double students = 80000;
while …
3、2007年培训学员数量 = 80000 * (1 + 0.25
)
(二)
do-while循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
苦练半年,眼看大赛在即,
盈盈提议:彩排一次,如果很令人满意,以后就不用彩排了,否则每天都要彩排,
直到现场表现让她满意为止!
他能否用动听的歌声震撼盈盈,用美妙的钢琴声博得赞赏呢?……
语法:
do {
循环操作
}while ( 循环条件 );
连续录入学生姓名,输入“q”则系统退出
String name
;
Scanner input = new
Scanner(System.in);
do{
System.out.print("请输入学生姓名:");
name =
input.next();
}while ( !name.equals("q")
);
System.out.println("程序结束");
while循环和do-while循环的区别?
(三)
for循环
语法:
for(初始化参数;判断条件
;更新循环变量){
循环体;
}
应用举例
public class ForLoop
{
public static void main(String []
args){
int result = 0;
for(int i=1; i<=100; i++) {
result += i;
}
System.out.println("result=" + result);
}
}
练习:用for循环计算1000以内的奇数的和
break语句的使用
continue语句的使用
二重循环
问题1:某次程序大赛,3个班级各4名学员参赛,计算每个班参赛学员的平均分
问题2:用 * 打印一个直角三角形图案
小结:
需要多次重复执行一个或多个任务的问题考虑使用循环来解决
Java
Debug调试技术的使用
练习:
1.
输入五次成绩,求平均成绩。
2.
打印输出0~200之间能被7整除但不能被4整除的所有整数;要求每行显示6个数据;
3.
Java数阶乘求和sum=1!+2!+...+10!;
1.5
算法
1.5.1
数组
静态数组
int ia[]
={1,2,3,4};
int [] ia=new
int[]{3,4,5};
int
a[5];//声明数组时,不能指定其长度,编译时将出错
使用数组时要注意的问题
空指针异常
如何得到数组长度
数组越界异常
如何理解多维数组,类似我们的棋盘。
java 中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。
定义一个多维数组
int[][]
xx;
xx=new
int[3][];
xx[0]=new
int[3];
xx[1]=new
int[2];
多维数组中元素的引用方式,如:x[1][2]。
规则矩阵数组可以在一条语句中产生,如:int xx[][]=new
int[2][3];
多维数组的静态初始化 ,如:
int[][]
xx={{3,2,7},{1,5},{6}};
与数组操作相关的方法:
原始方法数组复制
使用System.arraycopy()函数拷贝数组
在JDK6中,也为Arrays类别新增了数组复制的copyOf()方法
用Arrays.sort 来排序数组
使用数组的步骤是什么?
有一个数列:8,4,2,1,23,344,12
1)循环输出数列的值
2)求数列中所有数值的和
3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
1.5.2
算法
(一)
最大值、最大值及平均值
从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分?
//计算成绩最大值
max = score[0];
for (int index = 1;index < 5;index++) {
if (score[index] > max) {
max = score[index];
}
}
System.out.println("本次考试的五位学生的最高分是:
" + max);
练习:
小明要去买一部手机,他询问了4家店的价格,分别是2800元,2900元,2750元和3100元,显示输出最低价?
(二)
冒泡排序(重点)
冒泡排序是一种简单的排序算法。此方法将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。
原理:每次比较相邻两数,小的交换到前面,每轮结束后最大的数交换到最后
public class MaoPaoShiXian
{
public static void
main(String[] args) {
int a[] = { 8, 3, 120, 86,
34 };
// 循环输出数据
System.out.println("排序前数组中的数据为:");
for (int i = 0; i <
a.length; i++) {
System.out.print(a[i] +
"\t");
}
// 经过冒泡排序
// 首先控制比较多轮数
int temp;
for (int i = 0; i <
a.length - 1; i++) {// 控制轮数
for (int j = 0; j < a.length
- i - 1; j++) {// 控制每一轮比较多次数
if (a[j] < a[j + 1])
{// 从小到大与从大到小改变><符号就行
temp = a[j];//
交换两个数据的位置
a[j] = a[j +
1];
a[j + 1] =
temp;
}
}
}
//
System.out.println("\n排序后数组中的数据为:");
for (int i = 0; i <
a.length; i++) {
System.out.print(a[i] +
"\t");
}
// 我要正序进行输出
System.out.println("\n正序进行输出");
for (int i = a.length - 1; i
>= 0; i--) {
System.out.print(a[i] +
"\t");
}
}
}
冒泡排序速记口诀(升序):
N 个数字来排队
两两相比小靠前
外层循环 N-1
内层循环 N-1-i
(三)
增强for循环
加强的for
each循环语法
for(type element : array)
{
System.out.println(element)....
}
JavaSE5.0之前
int[] arr = {1, 2, 3, 4,
5};
for(int i = 0; i <
arr.length; i++)
System.out.println(arr[i]);
在JavaSE5.0之后
int[] arr = {1, 2, 3, 4,
5};
for(int element :
arr)
System.out.println(element);
如果是对象的话
String[] names =
{"caterpillar", "momor", "bush"};
for(String name :
names)
System.out.println(name);
二维数组
int[][] arr = {{1, 2,
3},
{4, 5, 6},
{7, 8, 9}};
for(int[] row : arr)
{
for(int element : row) {
System.out.println(element);
}
}
练习:
1.5.3
注释
Java语言中定义了三种注释形式:
// 单行注释----注释到行尾
JDK中提供了一个文档自动生成工具javadoc,在自定义类中public的成员前以形式加入的注释内容均可被自动提取到生成的说明文档中。
用法:javadoc source.java
Javadoc只处理源文件在类/接口、方法、域、构造器之前的注释,忽略其他地方的注释
public class
JavaDoc
{
static String
SDisplay;
public static void
main(String args[])
{
SDisplay = "Hello World "
;
System.out.println( SDisplay
);
}
•
javadoc 注释可以用于生成API文档
•
从javadoc注释中生成API文档的时候,主要从以下几项内容中提取信息:
–
包;
–
公有(public)类与接口;
–
公有(public)方法和受保护(protected)方法;
–
公有(public)属性和受保护(protected)属性。
•
常常在javadoc注释中加入一个以“@”开头的标记,结合javadoc指令的参数,可以在生成的API文档中产生特定的标记
•
常用的javadoc标记
–
@author:作者
–
@version:版本
–
@docroot:表示产生文档的根路径
–
@deprecated:不推荐使用的方法
–
@param:方法的参数类型
–
@return:方法的返回类型
–
@see:"参见",用于指定参考的内容
–
@exception:抛出的异常
–
@throws:抛出的异常,和exception同义
•
一条语句是以分号(;)结尾的一行代码
•
一个语句块是以一对花括号({})为边界的语句的集合
•
Java中允许有任意多的空格
,包括换行
关于善知教育(官网:www.itszt.com 微信公众号:善知技术)
地址:北京东燕郊经济技术开发区文化大厦
咨询老师郑老师电话微信13315631002QQ1939441377
目前我们开设Java服务器Html5前端网页Android移动端PHP服务器,有全日制班有周末班,学费优惠至8480,我们的优势:基础课程一个月免费学全程面授,平均就业薪资10000-15000,免费重听,跨学科免费学习
5-5.5个月大容量技术授课
0学费0基础入学,海量项目实训,弹性教学制度,大部分学生找到月薪10k以上薪资工作,项目实训自然终止.,课程全程视频录制,偶尔耽搁也不担心,学习途中随时可以无理由退费根据学生情况,灵活安排授课时间,一个科目学不会可以免费学习另一个科目,全日制班,周末班,网上授课同时进行,在群里面随时会更新一些我们的课程视频以及开班动态198983438(加群请备注在哪里看到我们的群)
善知教育学习视频大汇总