一.Java的标识符
1. 什么是标识符?
Java中对各种变量、方法和类等要素命名时使用的字符序列叫做标识符。
2. 标识符的命名规则:
(1) 标识符由字母、下划线 “_”、美元符 $或是数字组成。
(2) 标识符应以字母、下划线、美元符开头
(3) Java标识符注意区别大小写,长度无限制。
二、Java常量
java中的常量值用字符串表示,用来区别不同的数据类型。“常量”还会用在其他方面表示值不可变的变量。
三、Java变量
Java变量是程序中最基本的存储单元,包括变量名、变量类型和作用域。注:每一个变量在使用前都要进行声明,声明为 数据类型+变量名[=value]
在Java程序执行过程中,内存管理如下所示:
heap(堆):存放运算符new出来的东西
stack(栈):局部变量
data segment(数据段):静态变量和字符串常量
code segment(代码段):存放代码
四、Java局部变量和成员变量
1. 方法体内部变量声明的变量(包括形参)称为局部变量;
方法体内部是指与方法对应的大括号内部
2. 在方法体外,类体内声明的变量为成员变量;
public class Test {
private String name;//成员变量,也是全局变量
public void changeName() {
String n = "HelloWorld";//n就是局部变量
name = n;
}
}
五、Java数据类型的划分
有两种类型:基本数据类型和引用数据类型
1.1基本数据类型:
数值型:整数类型(byte, short, int, long) 浮点类型(float, double)
字符型:char
布尔型:boolean
1.2 引用数据类型
类:class 接口:interface 数组
基本数据类型转换: boolean类型不能转换为其他的数据类型。 注意:容量小的类型自动转换成容量大的数据类型。 byte,short,char->int->long->float->double 1.byte,short,char之间不能进行相互转换,三者在计算时首先会转换成int类型。 2.容量大的数据类型转换成容量小的数据类型时,加上强制转换符,可能会造成精度降低或是溢出
六、自加和自减运算符 ++(--)
1. 在前时先运算再取值
如:i = 1; int a = i++; 此时 a = 1; i++后,i 的值由1变为2。
2. 在后时先取值再运算
如:i = 1; int b = ++i; 此时 b = 2; ++i后,i 的值也为2。
七、字符串连接符
1. “+”除了算术加法运算外,还可用于对字符串进行连接操作
int salary = 500 + 3500;
String s = "Hello”+ “World";
2. “+”运算符两侧的操作数只要有一个是字符串(String)类型,系统就会自动将另一个操作数转换成字符串然后再进行连接
int a = 10;
System.out.println("a=" + a);
3. 在进行打印时,不管是什么类型,都自动转换成字符串进行打印。
System.out.println(a);
八、三目条件运算符
1. 三目运算符,语法格式:
x ? y :z
2. 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算符的结果为表达式y的值,否则整个运算结果为表达式z的值。
九、语句
1. 条件语句
if if..else if...else if if...else if...else if ...else switch 只有一句需要执行的语句时,可以省略{}
2. 循环语句
1. for 循环语句
1.1 for循环语句如下形式:
for (表达式1; 表达式2; 表达式3) { 语句; _ ; }
执行过程:
首先计算表达式1,接着执行表达式2,若表达式2的值为true,则执行语句,接着计算表达式3,判断表达式2的值,直到表达式2的值为false。
public class Test { <span style="font-family: Arial, Helvetica, sans-serif;">//计算1-10的阶乘</span>
public static void main(String[] args) {
// TODO Auto-generated method stub
long result = 0;
long f = 1;
for (int i = 1; i <= 10; i++) {
f = f * i;
result += f;
}
System.out.println("result="+result);
}
}
1.2 while & do-while 语句
1.2.1 while语句的形式:while (表达式) { 语句;.....; }
while语句的执行过程:先判断表达式的值。若为true,则执行后面的语句,然后再次判断条件并反复执行,直到条件不成立。
1.2.2 do-while语句的形式:do {语句; ......; } while (表达式);
do-while语句执行过程:先执行语句,再判断表达式的值,若为true,再执行语句,否则结束循环。
1.3 break & Continue 语句
break语句用于终止某个语句块的执行,用在循环语句中,可以强行退出循环;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int stop = 4;
for ( int i = 1; i <= 10; i++) {
//当i等于stop时,退出循环
if (i == stop) {
break;
}
System.out.println("i = "+i);
}
}
}
输出的值为:
i = 1
i = 2
i = 3
continue语句用于在循环体中,用在终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开始下一次循环过程:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int stop = 4;
for ( int i = 1; i <= 5; i++) {
//当i等于stop时,退出循环
if (i == stop) {
continue;
}
System.out.println("i = "+i);
}
}
}
输出的值为:
i = 1
i = 2
i = 3
i = 5
1.4 switch语句
swich() {
case xx:
............
case xx:
............
default:
............
}
为了防止case穿透,可以使用break语句,多个case可以合并到一块,java中的switch只能使用int类型值
十、方法
1. Java的方法:
Java的方法类似于其他语言的函数,都是为了实现某些特定的功能的代码片段。声明格式:
[修饰符1 修饰符2] 返回值类型 方法名(形式参数列表) {
java语句:。。。。。。。。
}
2. 方法的参数和返回值类型
形式参数: 在方法被调用时用于接收外界输入的数据。 实参: 调用方法时实际传给方法的数据。 返回值:方法在执行完毕后实际返还给调用它的环境的数据。 返回值类型:实现约定的返回值的数据类型,如无返回值,则给出无返回值类型void
public class MethodTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
m();
m2(2);
m3(3, 4);
int i = m4(4, 6);
System.out.println(i);
}
public static void m() {
System.out.println("Hello World");
System.out.println("OK");
}
public static void m2(int i) {
if (i > 3) {
return;
}
System.out.println(i);
}
public static void m3(int i, int j) {
System.out.println(i + j);
}
public static int m4(int i, int j) {
return i > j ? i : j;
}
}
输出的值为:
Hello World
OK
2
7
6
3. 方法的其他事项
Java语言中使用下述的调用方法:对象名.方法名(实参列表)
实参的数目、数据类型和次序必须和所调用的方法声明的形参列表匹配
return语句终止方法的运行并指定要返回的数据
Java中进行函数调用中传递参数时,遵循值传递的原则
基本类型传递的是该数据值的本身。引用类型传递的是对对象的引用,而不是对象本身。
十一、递归调用
定义:递归函数就是自调用函数,在函数体内部直接或者间接地自己调用自己,即函数的嵌套调用时函数本身。
例子1:递归函数的经典例子就时斐波那契数列。斐波那契数列的第一和第二项是1,后面每一项是前二项之和,即1,1,2,3,5,8,13....该例子可以采用自己递归调用的方法。
public class FibTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(fib(40)); //输出直接递归调用的值
}
public static int fib(int n) { //斐波那契数列方法
if (n == 1|| n ==2) {
return 1;
}else {
return (fib(n-1)+fib(n-2));
}
}
}
例子2:使用递归调用来实现阶乘
public class Recursive {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入一个整数:");
Scanner sn = new Scanner(System.in);
int n = sn.nextInt(); //输入一个整数
int result = Recursive(n);
System.out.println(result);
}
public static int Recursive(int n) { //递归函数
if (n <= 0) {
return 1;
}else {
return(n * Recursive(n - 1));
}
}
}
关于使用递归调用的利和弊:
1. 递归调用使程序易读,简化了程序设计的步骤,把本来冗长的阶乘实现只要几句代码就能实现。
2. 递归调用虽然简便,但是添加了系统的开销。每次运行,不仅对Cpu和栈内存都带来一定程度的占用的和消耗。