社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
版权所有,转载请注明原作者,仿冒侵权必究法律责任
Java是著名的Sun Microsystems于1995年推出的高级编程语言,由Green项目的工程师James Gosling(Java语言之父)带领开发。在计算机软件应用领域中,我们把Java的应用分为两种典型的类型:一种是安装和运行在在本机上的桌面程序;一种是通过浏览器访问的面向Internet的应用程序。
⒈JavaSE
全称是Java Platform Standard Edition,是Java技术的核心,提供基础Java开发工具、执行环境与API,主要用于桌面应用程序的开发。
⒉JavaEE
全称是Java Platform Enterprise Edition,它主要用于网络程序和企业级应用的开发。JavaEE是在JavaSE的基础上扩展的。
⒊JavaME
以往称作J2ME(Java Platform, Micro Edition )是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的高度优化的Java语言平台,包括虚拟机和一系列标准化的Java API。目前阶段,Java ME最流行的应用是游戏软件。因为与需要昂贵的专用设备和开发工具的竞争对手相比,Java ME程序可以在PC机上开发和仿真运行,然后很容易地部署到目标机上,从而使其开发、测试和发布的变得容易和廉价。
Sun公司官方主页:http://java.sun.com/。Eclipse官方网站:http://www.eclipse.org/。
第一步:编写源程序。把要下达的指令用Java语言描述出来,我们称这个文件为源程序或源代码。(以.java作为扩展名)
第二步:编译。使用Sun公司提供的JDK(Java Development Kit)能够实现编译和运行功能。经过它的翻译,输出一个后缀名为.class的文件(字节码文件)。
第三步:运行。在Java平台上运行字节码文件,便可看到运行结果。
使用集成开发环境——有了JDK的支持,我们就可以用记事本编写Java源程序。为使编写更加方便,我们使用集成开发环境(IDE)。IDE是一类软件,它将程序开发环境和程序调试环境集合在一起。用于开发Java的IDE很多,我们选用功能强大的Eclipse。
第一步:给程序起一个名字,在Java中我们叫它类名。第二步:写出main方法框架。第三步:在main方法中填写代码,也就是我们所要下达的指令集。
示例:
public class Accp { (Accp即类名)
public static void main (String[] args) {
//代码
}
}
★第一个简单的Java程序——向屏幕输出“Hello!”
public class Accp {
public static void main (String[] args) {
System.out.println(“Hello!”);
}
}
下面我们来分析一下程序的各个组成部分:
⒈程序框架
public class Accp { }
这里类名为Accp,它要和程序文件的名称一模一样。类名前面要有public和class修饰,所有属于这个类的代码放在后面的“{ }”中。
⒉main方法框架
public static void main(String[] args) { }
main方法是Java程序的入口,所有Java程序的起始点。一个程序只有一个main方法。
⒊填写的代码
System.out.println(“Hello!”);
这一行的作用就是打印一句话。System.out.println()是Java语言自带的功能,使用它可以向控制台输出信息,我们只有把要输出的语句用英文引号引起来放在println()中就可以了。【System.out.print();也可以实现输出。但是println()语句在打印完引号内的语句后会自动换行。】『System.out.println(“”)和System.out.print(“n”)可以达到同样的效果,”n”称为转义字符,将光标移到下一行第一格。另一个转义字符是”t”,将光标移到下一个制表位置(8个空格)』
1、多行注释——以“/*”开头,以“*/”结尾。示例:
/*
*Accp.java
*2007-8-5
*The first Java program
*/
public class Accp {……
……
}
2、单行注释——以“//”开头,“//”后面的内容都被认为是注释。
3、编码规范 示例:
class Accp {
public static void main (String[] args) {
System.out.print(“hello!”);
}
}
class前去掉了public,仍然能够得到相应的结果。可见,不规范的代码并不是错误的代码,但还是应该遵守相应规范:⑴类名必须使用public修饰;⑵一行只写一条语句。
4、常见错误
★Java常用数据类型
数据类型 |
说明 |
举例 |
int |
整型 |
用于存储整数 |
double |
双精度浮点型 |
用于存储带有小数点数 |
char |
字符型 |
用于存储单个字符 |
String |
字符串型 |
用于存储一串字符 |
不同的数据在存储时所需空间不同,如int型的数值要4个字节,而double型数值要8个字节。
比如,现在我们要储存考试成绩98.5分和学生姓名“张三”及性别“男”。
步骤1:声明变量。语法:数据类型 变量名;。
double score; //声明双精度浮点型变量score存储分数
String name; //声明字符串型变量name存储学生姓名
char sex; //声明字符型变量sex存储性别
步骤2:赋值。语法:变量名 = 值;。
score = 98.5;
name = “张三”;
sex = “男”;
你也可以将步骤1和步骤2合二为一,在声明的同时给变量赋值。例如:
double score = 98.5;
String name = “张三”;
条件 |
合法变量名 |
非法变量名 |
变量名必须以字母、“_”或“$”开头 |
_myCar $myCar score1 graph1_1 |
*myvariable1 variable% 9variable a+b My Variable t1-2 |
变量可以包括数字,但不能以数字开头 |
||
除了“_”和“$”以外,变量名不能包含任何特殊字符 |
||
不能使用Java关键字,如int、class、public等 |
Java对变量名长度没有限制,但区分大小写。
⒈变量为赋值先使用
⒉使用非法变量名
⒊变量名重名
※赋值运算符“=”。将等号右边表达式的结果赋值给等号左边的变量。
注意,a = b;和b = a;并不一样。
※算数运算符 常用的算数运算符
运算符 |
说明 |
举例 |
+ |
加法运算符,求操作数的和 |
5 + 3 |
- |
减法运算符,求操作数的差 |
5 – 3 |
* |
乘法运算符,求操作数的积 |
5 * 3 |
/ |
除法运算符,求操作数的商 |
5 / 3 |
% |
取余运算符,求操作数相除的余数 |
5 % 3等于2 |
下面就使用Java提供的运算符来解决一个简单的问题。
问题要求:
已知学员三门课程成绩——
课程 |
成绩 |
STB |
89 |
Java |
90 |
SQL |
60 |
编程以实现:⑴Java课程和SQL课程的分数之差;⑵3门课程平均分。
示例代码:
public class Accp {
public static void main (String[] args) {
int stb = 89;
int java = 90;
int sql = 60;
int diffen; //分数差
double avg; //平均分
System.out.println(“-----------------------”);
System.out.println(“STBtJavatSQL”);
System.out.println(stb +“t”+ java +“t”+ sql);
System.out.println(“-----------------------”);
diffen = java – sql;
System.out.println(“Java和SQL的成绩差:”+ diffen);
avg = (stb + java + sql) / 3;
System.out.println(“3门课的平均分是:”+ avg);
}
}
另外还有两个非常有用而特殊的运算符:自加运算符“++”和自减运算符“--”。这里,“数字1++”等价于“数字1 = 数字1 + 1”,“数字2--”等价于“数字2 = 数字2 – 1”。
⒈自动数据类型转化
规则1:如果一个操作数为double型,则整个表达式可提升为double型。
规则2:满足自动类型转换的条件。
⑴两种类型要兼容:数值类型(整型和浮点型)互相兼容。
⑵目标类型大于源类型:double类型可以存放int型数据,因为为double型变量分配的空间宽度足够存储int型变量。因此,我们也把int型变量转换成double型变量成为“放大转换”。
⒉强制数据类型转化
语法: (数据类型)表达式
在变量前加上括号,括号中的类型就是你要转换成的类型。比如:
double d = 34.5634;
int b = (int)d;
运行后b的值为34。从示例中可以看出,由于强制类型转换往往是从宽度达的类型转换成宽度小的类型,使数值损失了精度,因此我们称这种转换为“缩小转换”。
值 |
说明 |
true |
真 |
False |
假 |
问题:
从控制台录入同学1的成绩,与同学2 (80分)比较,输出对“同学1的成绩比同学2的成绩高吗?”的判断结果。
分析:要编程以实现两部分——⑴从键盘录入数据;⑵比较数据,并将比较结果输出。
示例代码:
import java.util.*; 【键入import java.util.Scanner;也可】
public class Accp {
public static void main(String[] args) {
int classmate_2 = 80;
bollean Big;
Scanner input = new Scanner(System.in);
System.out.print(“输入同学1的成绩:”);
int classmate_1 = input.nextInt();
Big = classmate_1 > classmate_2;
System.out.println(“同学1的成绩比同学2高吗?”+ Big);
}
}
关系运算符是用来做比较运算的,其值要么是真(true),要么是假(false)。
关系运算符 |
说明 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
== |
等于 |
!= |
不等于 |
if条件结构是根据条件判断之后再做处理的一种语法结构。语法:
if (条件) {
//要执行的语句
}
问题1:输入一位同学的成绩,高于90分时系统输出:获得奖学金。
示例代码:
import java.util.*;
public class Just {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print(“输入成绩:”);
int score = input.nextInt(); //从控制台获取学生成绩
if ( score > 90 ) {
System.out.println(“获得奖学金。”);
}
}
}
当问题的判断条件比较多时,我们可以用逻辑运算符将多个条件连接起来。
逻辑运算符 |
汉语名称 |
表达式 |
说明 |
&& |
与、并且 |
条件1 && 条件2 |
两个条件同时为真,结果为真 两个条件有一个为假,结果为假 |
|| |
或、或者 |
条件1 || 条件2 |
两个条件有一个为真,结果为真 两个条件同时为假,结果为假 |
! |
非 |
!条件 |
条件为真时,结果为假 条件为假时,结果为真 |
◎使用if-else条件结构
我们简单修改一下问题1:输入一位同学的成绩,高于90分时系统输出:获得奖学金;否则输出:继续努力。 示例代码:
import java.util.*;
public class Just {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print(“输入成绩:”);
int score = input.nextInt(); //从控制台获取学生成绩
if ( score > 90 ) {
System.out.println(“获得奖学金。”);
} else {
System.out.println(“继续努力!”);
}
}
}
◎使用多重if结构
问题2:对学员的成绩进行评测——成绩≥90:优秀;成绩≥80:良好;成绩≥60:中等;成绩<60:差。 示例代码:
public class Accp {
public static void main(String[] args) {
int score = (学生的成绩);
if ( score >= 90 ) {
System.out.println(“优秀”);
} else if ( score >= 80 ) {
System.out.println(“良好”);
} else if ( score >= 60 ) {
System.out.println(“中等”);
} else {
System.out.println(“差”);
}
}
}
else if块的顺序是连续的,第一个条件之后的所有条件都是在第一个条件不成立的情况下才出现的,而第二个条件之后的所有条件是在第一、二个条件都不成立的情况下才出现的。可见,else if块的顺序不是乱排的,要么从大到小,要么从小到大。
switch结构可以更好地解决等值判断的问题。语法:
switch (表达式) {
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
……
default:
语句n;
break;
}
下面看一个简单的问题:
运动员参加比赛。获得第一名得到金牌;第二名银牌;第三名铜牌。否则一无所获。
示例代码:
public class Match {
public static void main(String[] args) {
int mingci = (获奖名次);
switch (mingci) {
case 1:
System.out.println(“金牌”);
break;
case 2:
System.out.println(“银牌”);
break;
case 3:
System.out.println(“铜牌”);
break;
default:
System.out.println(“一无所获”);
}
}
}
“break”是可以省略的,但会带来一些问题。省略break后,当某个case的值符合条件时,执行该case块的语句,后面的case就不再进行条件判断,而是直接执行后面所有case块中的语句,直到遇到break结束。
每个case后可以有多个语句,且不需要用“{ }”括起来,case和default后都有一个冒号。多重if结构和switch结构很相似,它们都是用来处理多分支条件的结构,但是switch结构只能处理等值条件判断的情况,而且必须是整型或字符型变量,而多重if结构没有这个限制。
语法:
while (循环条件) {
循环操作
}
while后小括号中是循环条件,循环条件是一个布尔表达式。{ }中的语句称为循环操作,又称为循环体。
问题1:
用程序实现——当键入字符“n”时,执行循环体;键入字符“y”时实现输出。
示例代码:
import java.util.*;
public class Accp {
public static void main(String[] args) {
String answer;
Scanner input = new Scanner(System.in);
System.out.print(“考试成功了吗?(y/n):”);
answer = input.next();
while (! answer.equals(“y”)) {
System.out.println(“继续努力!”);
System.out.println(“考试成功了吗?(y/n):”);
answer = input.next();
}
System.out.println(“祝贺你。”);
}
}
比较两个int或double型变量是否相等,我们使用运算符“==”;String型变量是否相等我们通常采用这样的方法:
aString.equals(bString);。
问题2:
根据输入的某个班的成绩计算该班同学的平均成绩。要求输入班级的人数。
示例代码:
import java.util.*:
public class Accp {
public static void main(String[] args) {
String classNo; //班级号
int stuNum; //班级的学生人数
int score; //学生分数
int sum; //学生分数总和
int avg; //学生成绩平均值
System.out.print(“请输入班级号:”);
Scanner input = new Scanner(System.in);
classNo = input.next();
System.out.print(“请输入班级的学生总数:”);
stuNum = input.nextInt();
int i = 1;
while (i <= stuNum) {
System.out.print(“请输入学号” + i + “的成绩:”);
score = input.nextInt();
sum = sum + score;
i++;
}
avg = sum / stuNum;
System.out.println(“该班级的平均成绩:” + avg);
}
}
语法:
do {
循环操作
} while (循环条件);
问题:编写一个连续输入学生姓名的程序,输入完毕后键入“q”,程序停止。
示例代码:
import java.util.*;
public class Accp {
public static void main(String[] args) {
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循环的区别——⑴语法不同。与while循环相比,do-while循环将while关键字和循环条件放在后面,而且前面多了do关键字,后面多了一个分号。⑵执行次序不同。while循环先判断,再执行;do-while循环先执行,再判断。⑶一开始循环条件就不满足的情况下,while循环一次都不执行,do-while循环则不管什么情况都至少执行一遍。
语法:
for (表达式1;表达式2;表达式3) {
//循环语句
}
表达式 |
形式 |
功能 |
表达式1 |
赋值语句 |
循环结构的初始部分 |
表达式2 |
条件语句 |
循环结构的循环条件 |
表达式3 |
赋值语句,通常使用++或--运算符 |
循环结构的迭代部分,通常用来修改循环变量的值 |
问题1:循环输入某同学结业考试的5门成绩,并计算平均分。
示例代码:
import java.util.*;
public class Accp {
public static void main (String[] args) {
int score;
int sum = 0;
int avg;
Scanner input = new Scanner(System.in);
System.out.print(“输入学生姓名:”);
String name = input.next();
for (int i = 0;I <= 5; i++) {
System.out.print(“请输入第”+ i +“门课的成绩:”);
score = input.nextInt();
sum = sum + score;
}
avg = sum / 5;
System.out.print(name +“的平均分是:”+ avg);
}
}
问题2:输入任意一个数,输出这个数的加法表。
示例代码:
import java.util.*;
public class Accp {
public static void main(String[] args) {
int i, j;
Scanner input = new Scanner(System.in);
System.out.print(“请输入一个值:”);
int val = input.nextInt();
System.out.println(“根据这个值输出一下加法表:”);
for (i = 0; j = val; i<=val; i++, j--) {
System.out.println(i +“+” + j + “=” + (i+j));
}
}
}
在switch结构中,break语句用于终止switch语句的某个分支,使程序跳到switch语句块以外的下一个语句。
问题:循环输入某同学5门课的成绩的平均分,如果分数录入为负,停止录入并提示录入错误。
示例代码:
import java.util.*;
public class Accp {
public static void main (String[] args) {
int score;
int sum = 0;
int avg;
boolean wrong = true;
Scanner input = new Scanner(Syatem.in);
System.out.print(“输入学生姓名:”);
String name = input.next();
for (int I = 0; I < 5; i++) {
System.out.print(“请输入第”+ i+1 +“门课的成绩:”);
score = input.nextInt();
if (score < 0) {
wrong = false;
break;
}
sum = sum + score;
}
if (wrong) {
avg = sum / 5;
System.out.println(name + “的平均分是:”+ avg);
}else{
System.out.println(“分数录入错误,请重新输入!”);
}
}
}
break语句用于终止某个循环,使程序跳到循环块以外的下一句。在循环语句中位于break后的语句将不再执行。break语句不仅用在for循环中,也可以用在while和do-while循环中。break语句通常与if条件句一起使用。
问题:求1~100之间个位数字不是2、3、4、7,并且不能被3整除的整数之和。
示例代码:
public class Accp {
public static void main(String[] args) {
int sum = 0;
for(int I = 1; I <= 100; i++) {
if (i%10==2 || i%10==3 || i%10==4 || i%10==7 || i%3==0) {
continue;
}
sum = sum + i;
}
System.out.println(“1~100之间个位数不是2、3、4、7,且不能被3整除数的和是:”+ sum);
}
}
continue可以用于for循环,也可以用于while和do-while循环。在for循环中,continue使程序先跳转到迭代部分,然后判断循环条件,如果为true,继续下一次循环,否则,终止循环;在while循环中,continue执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。
public class <类名> {
//定义属性部分
属性1的类型 属性1;
属性2的类型 属性2;
……
属性n的类型 属性n;
//定义方法部分
方法1;
方法2;
……
方法n;
}
命名类时不能嵌入任何空格或“.”,以及除“_”、“$”字符之外的特殊字符。不能以数字开头。
问题:编写学生和教师类,输出学生和老师的相关信息。
学生类 |
教师类 |
属性: 姓名 年龄 参加的教程 兴趣 |
属性: 姓名 专业方向 教授课程 教龄 |
方法: 显示个人信息 |
方法: 显示个人信息 |
示例代码:
/*
* 学生类
*/
定义类的属性 |
转存失败重新上传取消public class Student {
String name;
int age;
String habby;
定义类的方法 |
转存失败重新上传取消 String classNo; //班级
public String toString() {
return name + “n 年龄:”+ age + “n 爱好:”+ hobby + “n 就读于”+ classNo;
}
}
/*
*教师类
*/
public class Teacher {
String name;
String course;
String dep; //专业方向
int teaYear;
public String toString() {
return name + “n 教授课程:” + course + “n 主攻方向:” + dep + “n 教龄:”+ teaYear;
}
}
toString()—— 一个非常特殊的方法。通常我们使用这个方法来显示一个类的相关信息。
return将返回一个自定义的字符串。
public String toString() {
return 自定义字符串;
}
一个类定义好了,就可以根据定义的模子创建对象了。由类生成对象称为类的实例化过程。
语法:类名 对象名 = new 类名();
问题:用类的思想输出学校的信息。
定义School类的属性 |
public class School {
String schoolName; //学校的名称
定义School类的toString()方法 |
转存失败重新上传取消 int classNum; //教室数量
int labNum; //机房数目
public String toString() {
return schoolName + “n”+ “配备:”+ classNum + “教室”+ labNum + “机”;
}
}
public class InitSchool {
public static void main(String[] args) {
School center = new School(); //创建一个School对象-center
center.schoolName = “(学校的名称)”; //引用schoolName属性
center.classNum = 教室数量; //引用classNum属性
center.labNum = 机房的数目; //引用labNum属性
System.out.println(center);
}
}
语法:对象名.属性 //引用对象的属性
对象名.方法名() //引用对象的方法
例如:center.name = ……; //赋值
center.toString(); //调用类的方法
在System.out.println(center)中,也可以写成center.toString(),toString()方法是一个比较特殊的方法,center等价于center.toString。访问类的方法就是执行类方法中的代码。在没有初始化示例变量时,Java会给它一个默认值。
类型 |
默认值 |
int |
0 |
double |
0.0 |
char |
‘u0000’ |
boolean |
false |
String |
null |
Java中的数据类型主要分为两类:
⑴基本数据类型:整形(int)、双精度浮点型(double)、字符型(char)、布尔型(boolean)。
⑵引用数据类型:字符串(String)、使用class自定义的类型。
数据类型比较
类型 |
特征 |
声明举例 |
使用举例 |
基本数据类型 |
没有方法 |
int age = …… |
age++; 变量自加1 |
引用数据类型 |
有方法 |
Student stu = new Strdent(); String s = new String(“……”);等价于String s = “……” |
stu.age++; 类的成员变量自加1 |
类的方法必须包含以下3个部分。
⑴方法的名称
⑵方法返回值的类型
⑶方法的主体
语法:
public 返回值的类型 方法名() {
//方法的主体
}
在方法的主体内,如果方法具有返回类型,则必须使用关键字return返回值。比如:在toString()方法中,返回类型是String类型,因此在方法体中必须用return返回一个字符串(方法至多可以返回一个值,不能返回多个值)。如果方法根本没有返回值,则返回值的类型应该用void,用于说明无返回值。
问题:计算班里同学的平均分和3门课的总成绩,编写成绩计算类来实现这些功能。
示例代码:
成绩计算类:
public class ScoreCalc {
int Java; //Java成绩
int c; //C#成绩
int db; //
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!