运算符和表达式(补)

六、位运算

  1. 算数左移右移<< >>
  2. 无符号右移>>>:左边舔0
  3. 取反、或且非、异或

    七、其他运算符

  4. instanceof:判断某个对象是否是某个类型的实例?结果true或false

  5. 取整:(int)x

    八、运算符优先级

  • 跟C类似、自行学习

流程控制

一、java程序结构

  1. 语句:
    1. 空语句:只有一个分号占位置
    2. 复合语句(块语句):用花括号括起来的
    3. 顺序:赋值、变量定义
    4. 选择:if、swich
    5. 循环:while、do-while、for
    6. 转向:break、label、continue、方法调用语句
    7. 异常处理:throw、try-catch-finally
  2. 用类搭起程序框架、以方法实现类的功能、在方法中用各种语句控制流程
  3. 每一个源程序文件由三部分组成:包声明语句packa、包引入部分import、类定义部分
    1. 类定义由类声明和类体组成
    2. 类中除了成员变量说明语句外、没有其他语句
    3. 所有操作性的语句都放在方法里面
    4. 类外不能定义任何变量
    5. 成员方法可以使用本类的所有变量
  4. 变量的作用域:

    1. 成员变量
    2. 局部变量
    3. 方法形式参数
    4. 注意:
      1. 方法中局部变量必须初始化
      2. 类中成员变量默认缺省值
      3. 在外部大作用域的变量,在小作用域可用;反之不可用

        二、选择语句

  5. 两分支if:与c没有任何区别,else有最近匹配原则

  6. 多分支switch:与c没有任何变化;

    三、循环语句

  7. while

  8. do-while
  9. for

    四、跳转语句

  10. java无goto

  11. break,退出本重循环、退出switch语句
  12. continue:
  13. return;

    五、递归

    例:递归实现十进制转二进制输出 ```java public class ToBin {

    public static void main(String[] args) {

    1. ToBin a=new ToBin();
    2. a.f(255);

    }

    public static void f(int n) {

    1. if(n==0) return;
    2. f(n/2);
    3. System.out.print(n%2);

    } }

  1. ---
  2. <a name="zdDlp"></a>
  3. ## 面向对象编程
  4. <a name="UFcBm"></a>
  5. ### 类和对象
  6. <a name="FaLPl"></a>
  7. #### 一、类
  8. 1. 介绍
  9. - 是对某一类对象的抽象
  10. - 是一种用户自定义的数据类型
  11. - 它有概括了一组对象共同性质的数据和方法组成
  12. - 它具有对数据的抽象性、隐蔽性、封装性
  13. - JAVA中,它既是一种抽象数据类型,也是一个独立的程序单元(程序模块)
  14. 2. 定义:[public] class 类名 [extends 父类名]{ [成员变量;] [成员方法;] }(Objects是默认的父类/根类)
  15. - 说明:类名首字母大写、extends表示继承、父类名是java中的一个定义,可由用户指定
  16. - public 修饰符,公有的,如果没有这个修饰符,则该类只能被同一个包中的类使用,同一个源程序中不能出现两个以上的public
  17. 3. 系统定义的类
  18. - Java语言=语法规则+类库
  19. - 常用系统包:
  20. - java.lang包:核心类库;
  21. - Object类:所有类的祖先类;
  22. - 基本数据类型:BooleanCharacterByte等;
  23. - Math类;
  24. - 异常处理类:Throwable\Exception\Error
  25. - 线程类:Thread\ThreadGroup\Runnable接口
  26. - 字符串类:String\StringBuffer
  27. - 其他类:System\Runtime\Class\ClassLoader
  28. - java.applet
  29. - Java.awt包:抽象窗口工具包、用于产生图形界面
  30. - 类:FontColorCanvasImage
  31. - java.io包:标准I/O库、底层IO操作
  32. - 使用方式:
  33. - 继承系统类:class A extends Applet
  34. - 创建系统类的对象:String s="JAVA";
  35. - 直接使用系统类:System.out.println();
  36. - 注意:用户程序必须用import语句引入它所用到的系 统类或系统类所在的包(除可自动引入的java.lang 外)
  37. 4. 类中成员的访问权限修饰符
  38. - 类的成员:成员变量和成员方法
  39. - 共有四种访问权限: public(公有)、protected(保护)、缺省 (默认)、private(私有)
  40. - 作用:实现隐藏,保证安全性
  41. - 访问范围:![image.png](https://cdn.nlark.com/yuque/0/2020/png/1092218/1584964609438-6a88cee2-2e36-4bdd-b54f-bfd0cfcb48a9.png#align=left&display=inline&height=252&originHeight=503&originWidth=954&size=60608&status=done&style=none&width=477)
  42. - 例子:
  43. ```java
  44. public class A {
  45. private int x=1;
  46. int y=2;//默认访问权限
  47. protected int z=3;
  48. public int k=4;
  49. public void f(){
  50. x=5;
  51. }
  52. }
  53. //说明:
  54. ①成员变量应保护隐藏,常定义为private, 减少类之间的数据耦合
  55. ②成员方法常定义为public,提供类的对外接 口功能,提高代码的复用率
  56. class Clock {
  57. private int hour,minute,second;
  58. public void setTime(int h,int m,int s) {
  59. hour=h;minute=m;second=s;
  60. }
  61. public void showTime(){
  62. System.out.println(hour+”:”+minute+“:”+second);
  63. }
  64. }

二、对象

  1. 介绍
    • 是类的实例
    • 是数据和方法的集合
    • 是实例属性状态和行为的结合体
    • 对象有三大特征:对象的标识、对象的状态、对象的行为
  2. 构造方法:
    • 是类的成员方法,可以访问本类的任何成员;
    • 其名字与类名相同,无返回值类型
    • 功能:在创建对象时用给定值将对象初始化, 即为对象的成员变量赋初值
    • 通常由系统自动调用,用户不用调用也不能显式调用
    • 可以有参数,可以重载(即方法同名,但要求同名方法形式参数的个数、类型、顺序不完全相同,系统根据方法形参进行区分)
    • 默认(缺省构造方法):
      • 若类中用户未自定义任何构造方法,则系统将 自动生成一个默认构造方法
      • 是构造方法的一种重载形式,它无参数,且方法体为空,它将成员变量初始化为对应类型的默认值
      • 若用户已经自定义了构造方法,则系统将不再 生成默认构造方法
      • 是public方法

构造方法举例:

  1. class A {
  2. private int x;
  3. public void set(int y){x=y;}
  4. public A(int z){x=z;} //构造方法
  5. }
  6. class B {
  7. private int b=0;
  8. public B(){b=1;}
  9. public B(int a){b=a;}
  10. public B(int m,int n){b=m+n;}
  11. }
  12. class D {
  13. private int x,y;
  14. public void set(int m,int n){x=m;y=n;}
  15. public D(int i,int j){set(i,j);}
  16. }
  1. 定义
    • 1.类名 对象名=new 类名(实际参数值);
    • 2.类名 对象名;对象名= new 类名(实际参数值);
    • 注:
      • A a; //声明对象引用,生成对象的空引用
      • a=new A(2); //实例化对象,分配资源并初始化成员变量,自动调用构造方法
      • new操作符返回一个引用,并将它赋给对象名
      • 对象引用实际上是一个指针,指向对象所在的内存地址
  2. 访问对象

    • “.”:成员运算符
    • 对象名·成员变量名;
    • 对象名·成员方法名(参数值);
    • 注:
      • ①由同一个类所创建的若干个对象的数据结构是相同的,类中的成员方法是共享的
      • ②由同一个类实例化的不同对象的成员变量存储空间各不相同
      • ③每个对象区别于其他同类对象的地方就是依靠它的自身属性,即成员变量的值
        1. class A {
        2. int x;
        3. public A(int y){x=y;}
        4. }
        5. public class B {
        6. public static void main(String args[]){
        7. A a=new A(2);//a.x=2
        8. System.out.println("a.x="+a.x); //a.x=2
        9. A b=new A(3);//b.x=3
        10. System.out.println("b.x="+b.x); //b.x=3
        11. }
        12. }
  3. 清除对象

    • 对象的生命周期:生成、使用、清除。
    • Java通过终结函数(finalize)执行自动的内存垃圾收集。
    • 自动垃圾收集:Java虚拟机定期寻找不再使用的对象并自动释放对象占用的系统资源(如内存)。
  4. 子对象:即对象成员,一个类的对象也可以作为另一个类的成员变量,也称子对象或类的包含关系

    1. class MyDate {//...... }
    2. class Person {
    3. String name; char sex;
    4. MyDate birthday;//子对象
    5. public Person(String s,char c,MyDate d) {
    6. name=s;sex=c;birthday=d;
    7. }
    8. }
  5. 对象的赋值:

    • 同一个类的对象间可以赋值;
    • 拷贝各成员变量的值;
    • 区别:对象赋值和引用赋值(对象间共享内存)
  6. 成员变量
    • 修饰符 类型符 成员变量名[=值];
    • 或修饰符 类型符 成员变量名[,成员变量 名,…];
    • 修饰符:
      • transient:过渡变量,Java语言目前对它没有明确说明,它一般用在对象序列化上,说明成员变量不允许被序列化,少用
      • volatile:易失变量,用来防止编译器对该成员进行某种优化,少用
  7. 成员方法
    • 修饰符 返回值类型 方法名(参数表){方法体;}
    • 修饰符:如native本地方法
      • 用其他语言编写的方法在Java中称为本地方法
      • SDK提供了Java本地接口JNI(Java Native Interface)使得Java虚拟机能运行嵌入在Java程序中的其他语言的代码(如C/C++,Fortran, 汇编语言等)
    • 成员方法的重载:一个标识符具有两个或两个以上的意义,它在任一特定环境下所表述的意义必须由其所处的上下文来决定
      • 即方法同名,可以实现多态
      • 同名的方法要求形式参数的个数、类型、顺序不完全相同
      • 系统根据形式参数来区分各种同名方法实现
      • 重载函数应完成相同或相似的功能
    • 对象作方法的参数
      • 一个类的对象作方法的参数:传引用,双向传递,共享内存
    • 类对象作方法的返回值类型
  1. class A {
  2. int x;
  3. A(int y) {
  4. x = y;
  5. }
  6. A f() {
  7. A a = new A(x + 1);
  8. return a;
  9. }
  10. void show() {
  11. System.out.println(x);
  12. }
  13. }
  14. public class B {
  15. public static void main(String args[]) {
  16. A b = new A(2);//b.x=2
  17. b.f().show();//3
  18. new A(5).f().f().f().show();//8
  19. }
  20. }
  1. static成员
  • 介绍:
    • static:静态
    • static成员:类成员
    • 是同类对象共享的成员
    • 该成员对该类生成的所有对象都是相同的
    • 它是类的成员,不属于任何一个类的具体对象实例
    • 可以在不创建类的实例的情况下直接引用该成员
    • 包括类成员变量和类成员方法
  • 类成员变量:
    • 即static成员变量,是类的成员变量,而不是某个实例对象的成员变量,可实现同类对象间的数据共享
    • 只存储一处,节省内存,提高效率,它是类固有的,可以直接引用,类似全局变量
    • 它只有一个版本,所有同类实例对象引用的都是同一个版本,用于描述类中所有对象共有的属性
    • 具有静态生存期,是静态存储的,只需初始化一次,以后将保持其值,直至下次改变为止
    • 定义:static 类型符类变量名[=值];
    • 引用:类名·类变量名;/对象名·类变量名;//利用其类名属性
  • 实例成员变量
    • 即非static成员变量,同类对象间通过实例成员变量进行区分,只能通过实例对象访问它
    • 引用格式:对象名·实例变量名;
  1. class A {
  2. private int i = 0;
  3. private static int j = 0;
  4. public A() {
  5. i++;
  6. j++;
  7. }
  8. public void f() {
  9. System.out.println(i + "," + j);
  10. }
  11. }
  12. public class B {
  13. public static void main(String args[]) {
  14. A a = new A();//a.i=1,A.j=1
  15. a.f(); //1,1
  16. new A().f();//1,2
  17. new A().f();//1,3
  18. }
  19. }
  • 类成员方法
    • 即static成员方法,是类的成员方法,而不是某个实例对象的成员方法,它只能访问类中的类成员,而不能访问实例成员
    • 在类成员方法中不能使用this和super,可通过类名或对象名访问它
    • 定义:static 类型符 类成员方法名([参数表]){方法体;}
    • 引用:类名·类成员方法名(参数值)/对象名·类成员方法名(参数值);//利用其类名属性
  • 实例成员方法:略
  1. class A {
  2. static int t = 1;
  3. A() {
  4. t++;
  5. }
  6. static void f() {
  7. System.out.println(t);
  8. }
  9. }
  10. public class B {
  11. public static void main(String args[]) {
  12. A.f();//1
  13. A.t = 4; //A.t=5
  14. A a = new A();
  15. a.f();//5
  16. }
  17. }

三、封装

  • 封装的好处

    • 模块化:代码维护独立进行,不影响其他模块,有很好的重用性;
    • 数据隐藏:对象有能力保护自己、通过其公共接口和其他对象练习,自行维护自身的数据方法,而不影响所有依赖它的对象
    • 最好做到单入口、单出口、高类聚、低耦合

      四、消息

  • 即方法调用

  • 构成消息的三要素:接收消息的对象、接收消息后的处理方法、方法所需要的参数;

    五、继承

  • 使父类的代码得到重用

  • Java的类之间只能单继承
  • Java的接口之间可以多继承(接口可以理解成一种抽象类)
  • 继承的时候就是可以把父类的所有成员变量和成员方法拿过来用,同时又可以定义新的方法和新的成员变量