JAVA复习

目录

一轮复习书本和ppt的基础学习

二轮复习应该注意的点(在试卷有涉及到的)


一轮复习书本和ppt的基础学习

数组

字符串

 (38条消息) intern()详解_aaaayl的博客-CSDN博客_intern详解

 对象的属性和方法

数据域变量可以是Java的任何一种基本数据类型或类。

局部变量与成员变量同名时,    在方法中的局部变量优先。

 

 类的所有构造方法均为private时, 无法在类外部创建对象

二轮复习应该注意的点(在试卷有涉及到的)

break; 跳出包含它的最内层循环, 或跳出包含它的最内层 switch结构。

break 标号; 跳出标号指明的循环。 continue; 结束包含它的最内层循环的当前迭代,程序控制转 到循环体末尾。 continue 标号; 结束标号指明的循环的当前迭代。

continue; 结束包含它的最内层循环的当前迭代,程序控制转 到循环体末尾。

continue 标号; 结束标号指明的循环的当前迭代。

String对象是不可变的, 其内容不能改变.

Java把相同的字符串直接量存储为一个对象(规范字符串).

由于String对象是不可变的,因此对String对象进行修改操作 时,原字符串不变,生成一个新的String对象。

封装性:

通过抽象找出具体实例中的共同特征(数据和操作), 将数据和对数据的操作封装在一起。

继承性:

子类可以继承父类的数据及数据操作, 同时又可以扩展子类独有的数据及数据操作。

多态性:

基于重载实现的静态多态:多个操作具有相同名称, 但是接 收不同的消息类型。

基于继承和覆盖实现的动态多态:同一操作被不同类型的 对象所调用产生不同的行为。

据域变量可以是Java的任何一种基本数据类型或类

Java中没有独立的方法,方法必须定义在类的内部。

定义在类中, 局部变量与成员变量同名时,    在方法中局部变量优先。

一个类可以有多个构造方法, 通过方法重载实现, 即多个构造方法的形式参数的个数或类型必须不同.

数据域进行初始化, 默认规则:引用型为 null; 数值型为0; boolean型为false; char型为'\u0000'。

Java语言中, 所有参数都是 “值传递”, 即发生方法调用时, 方法 调用语句中的 “实际参数” 把其值 “单向传递” 给 “形式参数”。

Java中的每个类都属于某一个包, 类在编译时被添加到包中.  默认情况下, 类在编译时放在当前目录(默认包).

把类添加到指定包中, 只需在源程序的最前端加上:  package    packageName;

访问权限:指限制在一段代码中能否访问一个类或能否通过 “.” 访问的类中定义的方法或成员变量。

所以说,访问权限修饰词默认构造方法的访问权限与类的访问权限相同)

  • 类:只有public或者无修饰符
  • 构造方法:public、private(仅供本类使用)、缺省(同包)、protected
  • (普通)方法、成员变量:public、private(仅供本类使用)、缺省(同包)、protected(继承子类的同包或不同包)
  • potected与继承有关

this引用数据域(例this.x):当(本类)数据域与方法局部变量同名(形参)

this关键字主要有2种使用方式:

  • 在类的构造方法中使用, 调用本类的其他构造方法

           语法:this(实参表) 如果使用该语句, 必须在构造方法的第一句

  • 在类的构造方法和实例方法中使用,代表对当前对象的引用

              访问实例变量语法:this.实例变量名

              访问实例方法语法:this.实例方法名(实参表)

(每个构造方法和实例方法中都隐含有一个this引用)

super关键词在子类中使用,主要有2种用途:

  • 调用父类的构造方法
  •  访问已经继承的成员变量和实例方法:  super.方法名(参数)  super.成员变量(无论否被隐藏或重写。)

static修饰是静态成员 (静态成员变量 静态方法)

未用static修饰是实例成员( 实例成员变量 实例方法)

不同对象的实例变量互不相同

  • 实例变量只有其对象创建后才会分配内存空间。
  • 使用new运算符创建对象时,每个对象的实例变量占用各自不同的内存空间。

所有对象共享静态变量

  • 静态变量在类加载到内存时分配内存空间。
  • 使用new运算符创建对象时,各个对象的实例变量共享已经存在的静态变量的内存空间。

  • 对静态变量的使用方式是:类名.静态变量
  • 对实例变量的使用方式是:引用变量.实例变量

如何理解在静态方法中不能访问未创建对象的实例成员?

如在static main主函数中要调用本类的方法

  1. 该方法是静态方法static(不需要经过实例化、在类加载时已经分配了内存空间)
  2. 创建该方法的实例化对象,以此用对象(实例化之后才分配入口地址后,进入该地址)访问该实例成员的方法等。

静态成员变量也可以进行封装

初始化器是直接在类中定义的用一对{}括起来的语句组。

  • 静态初始化器使用static关键字修饰,用来初始化静态变量。
  • 实例初始化器没有修饰关键字,用来初始化实例变量。
  • 一个类可以有0个或多个静态和实例初始化器。 

静态初始化器的执行:类首次加载到内存时,首先是静态数据 域变量的变量初始化;然后按排列顺序执行类中staic初始化器。

实例初始化器的执行:每次使用“new 构造方法();”创建对象 时,首先是实例数据域变量的变量初始化,然后开始执行本类 的构造方法,但在构造方法第一条语句执行之前,按排列顺序执行类中的实例初始化器,然后执行构造方法中的剩余语句。

java 对象的初始化过程 - 假装懂Java - 博客园 (cnblogs.com)

下图引用于上文:

 

静态方法可以重写,但不是覆盖

引用类型变量存放其引用的对象的地址

 

简单了解UML类图(- 表示 private + 表示 public # 表示 protected)

Java只支持单继承, 即一个子类只能继承一个父类.

不写时, 默认父类是: java.lang.Object

子类继承父类的成员变量和方法是指子类可以将它们作为自己 定义的成员, 访问权限保持不变

子类继承父类有2个方面的含义:

  • 继承父类可访问的数据域和方法

子类与父类在同一包中, 继承:public, protected, 默认

子类与父类在不同包中, 继承:public, protected

  • 扩展添加新的数据域和新方法

子类构造方法也可以调用本类中重载的其它构造方法(this),此时构造方法的第一句不会是super()或super(参数)

但是要保证任何一个子类构造方法都能够调用父类构造方法。

类成员的中访问权限修饰词的作用域

本类

同包的 类

不同包 的子类

不同包的 非子类

private

YES

缺省

YES

YES

protected

YES

YES

YES

public

YES

YES

YES

YES

final关键字总结

final类不能被继承. public final class Math {    ......    }

final方法不能在子类中被重写(覆盖).  public class A{ …… public final void aMethod() { … … } }

final变量的值不能改变, 即常量.  final double PI = 3.14159;

ToString方法重写

equals方法重写

hasCode方法重写

 instanceof运算符

程序中如何实现多态:

  • 多态在类的继承层次结构中实现.
  • 表现多态的形式是子类覆盖父类的实例方法.
  • 通过父类的引用去访问继承层次中不同类的对象. 调用覆盖的方法时产生多态。

注:如果子类重写父类的静态方法,子类对象的向上转型对象不能调用子类静态方法, 只能调用父类静态方法。 即:多态性只针对实例方法

抽象方法: 只有方法头没有方法体.用abstract修饰.

抽象类: 用abstract修饰的类, 不能用new创建对象.

抽象类与抽象方法的相关说明:

  • 包含抽象方法的类必须是抽象的, 但也允许声明没有抽象方法 的抽象类.
  • 抽象类不能用new运算符实例化, 但包含构造方法.
  • 具体的父类也可以派生抽象的子类.
  • 子类可以将父类的具体方法覆盖为抽象方法.(少用)
  • 抽象类不能创建对象, 但可以声明对象引用变量.  GeometricObject geo;

接口

  • 子类需要Override其实现接口的抽象方法,如果没有全部覆盖(实现),则子类需要使用abstract修饰。
  • 接口中的抽象方法均为public,因此子类在覆盖接口的抽象 方法时,形式上要求方法头完全相同。

 由于接口中的成员都是public的, 因此子接口可以继承父接口中 的所有成员。

如果子接口中定义了与父接口同名的常量或者相同的方法, 则父接口中的常量被隐藏,方法被覆盖。

如果多个父接口中有同名的常量,则子接口不能继承, 但子接口中可以定义一个同名的常量。

如果一个类继承一个父类并实现了一个接口,而从父类和接 口中继承了同名的方法,此时采用“类比接口优先”的原则, 即只继承父类的方法,而忽略来自接口的默认方法。

实现Clone

实现类的clone操作, 需要完成2项工作:

  •  类必须实现java.lang.Cloneable接口.

package java.lang;

public interface Cloneable { }

  • 类需要覆盖Object类的clone方法.

Object类中的clone方法的定义如下:

protected native Object clone() throws CloneNotSupportedException;

“克隆”的使用示例:

House h1 = new House(1, 137.00);

House h2 = (House)h1.clone();    //注意强制类型转换

说明: 一个类如果实现了Cloneable接口,通常需要重写equals和 hashcode方法.

“深克隆”:即克隆对象中存在引用型变量。

@Override
public Object clone() {  
try {
      House t = (House) super.clone();
      t.whenBuilt = (Date) this.whenBuilt.clone(); 
      return t;
   } 
    catch (CloneNotSupportedException e) { 
           return null;
   }
}

 catch子句的排列顺序非常重要, 不能将父类的 catch子句排列在子类catch子句之前.

Java强制要求程序员处理必检异常, 如果一个方法中某些语句可能抛出必检异常, 则:

该方法中处理该必检异常, 即使用try-catch语句.

该方法必须声明抛出该异常, 即方法声明中使用throws关 键字声明该异常.

File

一个类实现了 java.io.Serializable 接口,则该类的对象就是 可序列化对象

使用 ObjectOutputStream ObjectInputStream 能够对 可序列化对象进行读写操作。 java.io.Serializable 是标记型接口,实现时无需重写方法。

例如: public class Student implements java.io.Serializable { //...... }fanxing

 泛型

Java定义类时可以继承一个父类或实现多个接口,父类可以是 泛型类,接口可以是泛型接口。

泛型的注意事项:

 

 匿名类允许同时定义和实例化一个类。

匿名类实际上是一个没有名字的内部类。

匿名类表达式由以下几个部分组成:

new

匿名类需要实现的接口名或需要继承的父类名

圆括号, 其中包含需要传递给(父类)构造方法的参数 如果匿名类实现的是接口, 参数表保持为空

类的主体, {}包围, 其中可以声明数据域或方法

 函数式接口,一个接口,然后就是在这个接口里 面只能有一个抽象方法

Lambda表达式是在应用函数式接口环境下一种简化定义形式, 可以解决匿名内部类定义形式复杂的缺点。

Lambda表达式可以作为实参传递给方法。方法对应的形参必 须是一个函数式接口类型。

多线程

 Thread类:直接继承,重写run()方法;

Runable接口:(先创建一个可实现runable接口的类,通过创建thread类对象,调用该对象的方法,即实现run重写的方法。)

运行实现Runnable接口的线程需要通过Thread类对象,步骤如下:

  • 创建实现了 Runnable 接口类的对象
  • 创建 Thread 类的对象,将实现Runnable接口类的对象作为构造方法参数
  • 使用 Thread 类对象的 start 方法启动线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值