第2章 Java基础语法
介绍了Java的基本语法,包括关键字、标识符、基本数据类型等。
本章是Java语言的基础。
如果你学过C语言或C++的话,看这章会很快,因为Java和C++太相似了。
2.1 标识符与关键字
2.1.1 标识符(identifier)
标识符是以字母、下划线、开始的一个字符序列,后面可以跟字母、数字、下划线、美元符。
Java对大小写敏感。
标识符的命名有一些常用的约定: //是约定不是规定。
(1)常亮用大写字母命名,如PI,RED
(2)类名用大写字母开头,如Area
(3)变量名、对象名、方法名等用小写字母,如果有多个单词,则用首字母大写区分,如speedCar。
2.1.2 关键字(keyword)
和C语言的关键字基本相同;
关键字不需要单独记忆。
2.2 数据与数据类型
与C/C++基本相同。
需要注意Java中布尔型只能进行 逻辑运算 ,不能进行算术运算。
2.3 常量和变量
2.3.1 常量
常量即程序执行过程中不变的量。
可以使用标识符表示常量,称为符号常量。
符号常量的声明 :
final [修饰符] 数据类型 变量名=[初始值];
说明:
修饰符限定常量的使用范围,如public,private,修饰符可以省略。
符号常量举例:
final double PI = 3.1415926;
final int MAX = 1000;
常量不一定定义时赋值,可以但只能赋值一次。
final int j;
j = 20 //允许,第一次赋值
j = 30;//不允许,因为前面已经赋值过了。
2.3.2 变量
变量指在程序运行过程中值可以改变的量。
1.变量的定义:
变量定义的语法:
[修饰符] 数据类型 变量名[=值]; //定义一个变量
[修饰符] 数据类型 变量名1[=值], 变量名2[=值], ...; //定义多个变量
2.变量的初始化与赋值
变量的赋值语法:
变量名= 值;
举例:
private int age = 18;
char x = 'a',Y;
boolean t = false;
public String s1 = "Abcdefg", s2;
在Java中,变量如果没有初始化,编译器会提供初始值。(0,false)
3.变量的类型转换
4.变量的作用域
变量的作用域与他定义的位置和修饰符有关。
变量的位置:1.在类块中定义,为成员变量
2.在函数中定义,为局部变量。
如:
class ClassA{
int m_a = 20; //成员变量
public static void main(String[] args) {
int a = 30 ;//局部变量
}
}
修饰符:static
用static修饰的变量为类变量(或称为静态变量)。static只能修饰类块中定义的变量(成员变量)。
类变量作用域是整个类,可以直接用“类目.变量名”引用,而不用产生类的具体实例。
2.4 基本输入与输出
2.4.1 数据的输入
1.标准输入
(1)System.in.read()
(2)System.in.read(byte buffer[], int start, int size);
read()是通过标准输入流从键盘读入一个字节;(2)是一次性读入多个字节,放入buffer中,
使用read()方法时,必须使用“异常处理”机制,在main方法的末尾加一个throws IOException。//IOException在java.io包中
import java.io.*;
public class Example2_1 {
public static void main(String args[]) throws IOException{
char c;
System.out.println("请输入一个字符:");
c = (char)System.in.read();
System.out.println("输入的字符是:"+c);
}
}
import java.io.*;
public class Example2_2 {
public static void main(String args[]) throws IOException{
int x,y;
System.out.println("请输入一个0~9的数:");
x = (int)System.in.read();
y = x - 48;
System.out.println("输入的字符是:"+x);
}
}
System.in.read()得到的是字符对应的Unicode编码,要进行一定处理才能变成相应的数值。
2.利用Scanner类输入(比较好用)
使用Scanner创建一个对象接受键盘输入。
Scanner类在包java.util中。
import java.util.*;
public class Example2_3 {
public static void main(String args[]) {
System.out.print("请输入一个整数:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
System.out.println("输入的数为:"+a);
}
}
程序使用nextInt()读入一个整数,类似的有nextLong、 nextFloat 、nextDouble 、nextBoolean等
如果想输入字符串,可以使用nextLine
3.命令行参数(略)
2.4.2 数据的输出
1.标准输出
(1)System.out.print(表达式);
(2)System.out.println(表达式);
二者的区别:(2)会在输出结果后自动产生一个回车换行。
2.格式化输出
System.out.printf() //类似C语言的printf()
补充:图形化输入输出
通过文本框输入,标签输出,按钮执行
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class graphInOut {
public static void main(String args[])
{
new AppFrame();
}
}
class AppFrame extends JFrame
{
JTextField in = new JTextField(10);
JButton btn = new JButton("求平方");
JLabel out = new JLabel("用于显示结果的标签");
public AppFrame()
{
setLayout(new FlowLayout());
getContentPane().add(in);
getContentPane().add(btn);
getContentPane().add(out);
btn.addActionListener(new BtnActionAdapter() );
setSize(400,100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
class BtnActionAdapter implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = d*d;
out.setText(d+"的平方是:"+sq);
}
}
}
Java8中的按钮动作设置可以写成更简单的形式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class graphInOut {
public static void main(String args[])
{
new AppFrame();
}
}
class AppFrame extends JFrame
{
JTextField in = new JTextField(10);
JButton btn = new JButton("求平方");
JLabel out = new JLabel("用于显示结果的标签");
public AppFrame()
{
setLayout(new FlowLayout());
getContentPane().add(in);
getContentPane().add(btn);
getContentPane().add(out);
btn.addActionListener(e->{ //使用e->{}
String s = in.getText();
double d = Double.parseDouble(s);
double sq = d*d;
out.setText(d+"的平方是:"+sq);
});
setSize(400,100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
}
2.5 运算符和表达式(和C基本相同,略)
2.6 程序流程控制(和C基本相同,略)
2.7 数组
在Java中,数组是一种特殊的对象。Java数组的创建使用关键字new,为数组分配内存。
2.7.1 一维数组
1.一维数组的声明与创建
一维数组的声明格式:
(1)类型 数组名[];
(2)类型[] 数组名;
实例:int a[];
float[] b;
一维数组的创建格式:
数组名 = new 类型[数组长度];
例如:a = new int[5];
通常数组的声明和创建合在一起:
int a[] = new int[5];
数组一旦创建,就不能改变长度。
2.一维数组的赋值
创建数组后,会自动给每个数组元素赋一个初始值。
也可以自己给元素赋值:
(1)在声明数组时进行初始化赋值、
如:int a[] = {1,2,3,4,5}
(2)在声明和创建数组之后,给每个元素赋值。
如:int a[] = new int[5];
a[0] =1;a[1] = 2;...a[4] = 5;
- 一维数组的应用
一维数组元素的使用:
数组名[下标]
获得数组元素个数:
a.length
2.7.2 二维数组
称二维数组为数组的数组。
1.二维数组的声明与创建
二维数组声明:
类型 数组名[][];
例:int a[][];
创建:
a = new int[2][3];
另一个分配形式:
int c[][] = new int[2][];
c[0] = new int [3];
c[1] = new int[4];
二维数组的各行长度可以不同。
二维数组的赋值
(1)逐个元素进行赋值
(2)初始化赋值 如:int a[][] = {{1,2,3},{2,3,4}};
二维数组的应用
2.7.3 数组的操作
1.数组排序(冒泡排序、选择排序等)
2.数组复制 Java的System类提供了复制数组的方法,格式如下:
System.arraycopy(原数组,源位置,目标数组,目标位置,复制数量);
2.8 方法
在面向对象语言中,对象的行为都是以方法实现的,通常一个方法完成一个功能。
在其他语言中,方法被称为函数。
2.8.1 方法的定义
[修饰符] 返回值类型 方法名([形参表]) [throws异常列表]
{
}
说明:修饰符制定方法的使用范围,可以是public,private等
2.8.2 方法的调用
方法名(实参表)
2.8.3 参数传递的方式
1.值传递:参数为简单数据类型时,传递值。
2.地址传递 当参数为复合数据类型时,对形参的访问相当于对实参的访问,形参被认为是实参的别名。
2.8.4 方法的重载
可以有多个同名的函数,但参数不同,调用时选择参数匹配的一个。
2.8.5 嵌套与递归
一个方法内调用另一个方法叫嵌套。
递归是自己调用自己。