运算符和表达式(补)
六、位运算
- 跟C类似、自行学习
流程控制
一、java程序结构
- 语句:
- 空语句:只有一个分号占位置
- 复合语句(块语句):用花括号括起来的
- 顺序:赋值、变量定义
- 选择:if、swich
- 循环:while、do-while、for
- 转向:break、label、continue、方法调用语句
- 异常处理:throw、try-catch-finally
- 用类搭起程序框架、以方法实现类的功能、在方法中用各种语句控制流程
- 每一个源程序文件由三部分组成:包声明语句packa、包引入部分import、类定义部分
- 类定义由类声明和类体组成
- 类中除了成员变量说明语句外、没有其他语句
- 所有操作性的语句都放在方法里面
- 类外不能定义任何变量
- 成员方法可以使用本类的所有变量
变量的作用域:
两分支if:与c没有任何区别,else有最近匹配原则
-
三、循环语句
while
- do-while
-
四、跳转语句
java无goto
- break,退出本重循环、退出switch语句
- continue:
-
五、递归
例:递归实现十进制转二进制输出 ```java public class ToBin {
public static void main(String[] args) {
ToBin a=new ToBin();
a.f(255);
}
public static void f(int n) {
if(n==0) return;
f(n/2);
System.out.print(n%2);
} }
---
<a name="zdDlp"></a>
## 面向对象编程
<a name="UFcBm"></a>
### 类和对象
<a name="FaLPl"></a>
#### 一、类
1. 介绍
- 是对某一类对象的抽象
- 是一种用户自定义的数据类型
- 它有概括了一组对象共同性质的数据和方法组成
- 它具有对数据的抽象性、隐蔽性、封装性
- 在JAVA中,它既是一种抽象数据类型,也是一个独立的程序单元(程序模块)
2. 定义:[public] class 类名 [extends 父类名]{ [成员变量;] [成员方法;] }(Objects是默认的父类/根类)
- 说明:类名首字母大写、extends表示继承、父类名是java中的一个定义,可由用户指定
- public 修饰符,公有的,如果没有这个修饰符,则该类只能被同一个包中的类使用,同一个源程序中不能出现两个以上的public
3. 系统定义的类
- Java语言=语法规则+类库
- 常用系统包:
- java.lang包:核心类库;
- Object类:所有类的祖先类;
- 基本数据类型:Boolean、Character、Byte等;
- Math类;
- 异常处理类:Throwable\Exception\Error
- 线程类:Thread\ThreadGroup\Runnable接口
- 字符串类:String\StringBuffer
- 其他类:System\Runtime\Class\ClassLoader
- java.applet包
- Java.awt包:抽象窗口工具包、用于产生图形界面
- 类:Font、Color、Canvas、Image等
- java.io包:标准I/O库、底层IO操作
- 使用方式:
- 继承系统类:class A extends Applet
- 创建系统类的对象:String s="JAVA";
- 直接使用系统类:System.out.println();
- 注意:用户程序必须用import语句引入它所用到的系 统类或系统类所在的包(除可自动引入的java.lang包 外)
4. 类中成员的访问权限修饰符
- 类的成员:成员变量和成员方法
- 共有四种访问权限: public(公有)、protected(保护)、缺省 (默认)、private(私有)
- 作用:实现隐藏,保证安全性
- 访问范围:
- 例子:
```java
public class A {
private int x=1;
int y=2;//默认访问权限
protected int z=3;
public int k=4;
public void f(){
x=5;
}
}
//说明:
①成员变量应保护隐藏,常定义为private, 减少类之间的数据耦合
②成员方法常定义为public,提供类的对外接 口功能,提高代码的复用率
class Clock {
private int hour,minute,second;
public void setTime(int h,int m,int s) {
hour=h;minute=m;second=s;
}
public void showTime(){
System.out.println(hour+”:”+minute+“:”+second);
}
}
二、对象
- 介绍
- 是类的实例
- 是数据和方法的集合
- 是实例属性状态和行为的结合体
- 对象有三大特征:对象的标识、对象的状态、对象的行为
- 构造方法:
- 是类的成员方法,可以访问本类的任何成员;
- 其名字与类名相同,无返回值类型;
- 功能:在创建对象时用给定值将对象初始化, 即为对象的成员变量赋初值
- 通常由系统自动调用,用户不用调用也不能显式调用
- 可以有参数,可以重载(即方法同名,但要求同名方法形式参数的个数、类型、顺序不完全相同,系统根据方法形参进行区分)
- 默认(缺省构造方法):
- 若类中用户未自定义任何构造方法,则系统将 自动生成一个默认构造方法
- 是构造方法的一种重载形式,它无参数,且方法体为空,它将成员变量初始化为对应类型的默认值
- 若用户已经自定义了构造方法,则系统将不再 生成默认构造方法
- 是public方法
构造方法举例:
class A {
private int x;
public void set(int y){x=y;}
public A(int z){x=z;} //构造方法
}
class B {
private int b=0;
public B(){b=1;}
public B(int a){b=a;}
public B(int m,int n){b=m+n;}
}
class D {
private int x,y;
public void set(int m,int n){x=m;y=n;}
public D(int i,int j){set(i,j);}
}
- 定义
- 1.类名 对象名=new 类名(实际参数值);
- 2.类名 对象名;对象名= new 类名(实际参数值);
- 注:
- A a; //声明对象引用,生成对象的空引用
- a=new A(2); //实例化对象,分配资源并初始化成员变量,自动调用构造方法
- new操作符返回一个引用,并将它赋给对象名
- 对象引用实际上是一个指针,指向对象所在的内存地址
访问对象
- “.”:成员运算符
- 对象名·成员变量名;
- 对象名·成员方法名(参数值);
- 注:
- ①由同一个类所创建的若干个对象的数据结构是相同的,类中的成员方法是共享的
- ②由同一个类实例化的不同对象的成员变量存储空间各不相同
- ③每个对象区别于其他同类对象的地方就是依靠它的自身属性,即成员变量的值
class A {
int x;
public A(int y){x=y;}
}
public class B {
public static void main(String args[]){
A a=new A(2);//a.x=2
System.out.println("a.x="+a.x); //a.x=2
A b=new A(3);//b.x=3
System.out.println("b.x="+b.x); //b.x=3
}
}
清除对象
- 对象的生命周期:生成、使用、清除。
- Java通过终结函数(finalize)执行自动的内存垃圾收集。
- 自动垃圾收集:Java虚拟机定期寻找不再使用的对象并自动释放对象占用的系统资源(如内存)。
子对象:即对象成员,一个类的对象也可以作为另一个类的成员变量,也称子对象或类的包含关系
class MyDate {//...... }
class Person {
String name; char sex;
MyDate birthday;//子对象
public Person(String s,char c,MyDate d) {
name=s;sex=c;birthday=d;
}
}
对象的赋值:
- 同一个类的对象间可以赋值;
- 拷贝各成员变量的值;
- 区别:对象赋值和引用赋值(对象间共享内存)
- 成员变量
- 修饰符 类型符 成员变量名[=值];
- 或修饰符 类型符 成员变量名[,成员变量 名,…];
- 修饰符:
- transient:过渡变量,Java语言目前对它没有明确说明,它一般用在对象序列化上,说明成员变量不允许被序列化,少用
- volatile:易失变量,用来防止编译器对该成员进行某种优化,少用
- 成员方法
- 修饰符 返回值类型 方法名(参数表){方法体;}
- 修饰符:如native本地方法
- 用其他语言编写的方法在Java中称为本地方法
- SDK提供了Java本地接口JNI(Java Native Interface)使得Java虚拟机能运行嵌入在Java程序中的其他语言的代码(如C/C++,Fortran, 汇编语言等)
- 成员方法的重载:一个标识符具有两个或两个以上的意义,它在任一特定环境下所表述的意义必须由其所处的上下文来决定
- 即方法同名,可以实现多态
- 同名的方法要求形式参数的个数、类型、顺序不完全相同
- 系统根据形式参数来区分各种同名方法实现
- 重载函数应完成相同或相似的功能
- 对象作方法的参数
- 一个类的对象作方法的参数:传引用,双向传递,共享内存
- 类对象作方法的返回值类型
class A {
int x;
A(int y) {
x = y;
}
A f() {
A a = new A(x + 1);
return a;
}
void show() {
System.out.println(x);
}
}
public class B {
public static void main(String args[]) {
A b = new A(2);//b.x=2
b.f().show();//3
new A(5).f().f().f().show();//8
}
}
- static成员
- 介绍:
- static:静态
- static成员:类成员
- 是同类对象共享的成员
- 该成员对该类生成的所有对象都是相同的
- 它是类的成员,不属于任何一个类的具体对象实例
- 可以在不创建类的实例的情况下直接引用该成员
- 包括类成员变量和类成员方法
- 类成员变量:
- 即static成员变量,是类的成员变量,而不是某个实例对象的成员变量,可实现同类对象间的数据共享
- 只存储一处,节省内存,提高效率,它是类固有的,可以直接引用,类似全局变量
- 它只有一个版本,所有同类实例对象引用的都是同一个版本,用于描述类中所有对象共有的属性
- 具有静态生存期,是静态存储的,只需初始化一次,以后将保持其值,直至下次改变为止
- 定义:static 类型符类变量名[=值];
- 引用:类名·类变量名;/对象名·类变量名;//利用其类名属性
- 实例成员变量
- 即非static成员变量,同类对象间通过实例成员变量进行区分,只能通过实例对象访问它
- 引用格式:对象名·实例变量名;
class A {
private int i = 0;
private static int j = 0;
public A() {
i++;
j++;
}
public void f() {
System.out.println(i + "," + j);
}
}
public class B {
public static void main(String args[]) {
A a = new A();//a.i=1,A.j=1
a.f(); //1,1
new A().f();//1,2
new A().f();//1,3
}
}
- 类成员方法
- 即static成员方法,是类的成员方法,而不是某个实例对象的成员方法,它只能访问类中的类成员,而不能访问实例成员
- 在类成员方法中不能使用this和super,可通过类名或对象名访问它
- 定义:static 类型符 类成员方法名([参数表]){方法体;}
- 引用:类名·类成员方法名(参数值)/对象名·类成员方法名(参数值);//利用其类名属性
- 实例成员方法:略
class A {
static int t = 1;
A() {
t++;
}
static void f() {
System.out.println(t);
}
}
public class B {
public static void main(String args[]) {
A.f();//1
A.t = 4; //A.t=5
A a = new A();
a.f();//5
}
}