《Java程序设计实用教程》复习笔记

一 绪论

  • Java特性:
    ①跨平台:一个应用程序能够运行于不同的操作系统平台。利用Java虚拟机实现,运行于操系统之上,解释Java编译后的.class字节码。
    在这里插入图片描述
    ②面向对象:利用类和对象的机制将数据和方法封装在一起,通过统一的接口与外界交互,通过类的继承机制实现代码重用。
    ③可靠性:异常处理、垃圾回收机制。
    ④安全性:域管理,本地代码和远程代码都可以通过配置策略设定可访问的资源域。
    ⑤多线程
    ⑥支持分布式网络应用

  • 对C/C++的改进:在这里插入图片描述

  • Java包:在这里插入图片描述

二 Java语言基础

基础复习:简介,命名规范,数据类型,变量,控制结构,数组,Scanner等。

Java语言的字符集采用16位Unicode字符编码,其前128个字符与ASCII字符集相同,之后是拉丁语、希腊语、汉字等。

  • 关键字:public, class, new, static, void等

  • 标识符:用户定义的单词。以字母、_$开头的,字母、数字、_$组成的序列。不能使用关键字。

  • 基本数据类型在这里插入图片描述

  • 变量和常量

  • 运算符:
    算术运算符:++,–只能作用于整数类型和字符类型,不能作用于表达式。
    关系运算符
    位运算符:位运算。
    逻辑运算符:对布尔类型进行与 或 非 异或,运算结果为布尔类型,整数不能进行逻辑运算(!0 错)。
    赋值运算符:=,可以与算数、逻辑、位运算符组合成复合赋值运算符。
    类型强制转换符:(int) 表达式。整数类型不能转化为布尔类型(boolean a = 1 错)
    条件运算符:? :
    括号运算符、字符串连接运算符、点运算符、new运算符。

  • 流程控制语句:
    在这里插入图片描述

  • 数组:==引用类型,一个数组变量引用一个数组。==用new动态申请数组存储空间,Java根据其数据类型对其初始化。int[] a = new int[length];或 int a[] = new int[length];在这里插入图片描述

  • 静态方法:Java没有全局函数,函数声明在类中,称为成员方法,有静态方法和实例方法。
    Java Application程序从main()方法开始执行,只能被虚拟机调用。
    参数传递:方法调用时,实际参数向形式参数传值,如果是基本数据类型则传递值,引用数据类型传递引用。 在这里插入图片描述

  • 方法重载:一个类中如果有多个同名方法但带有不同的参数列表(参数类型、个数、次序不同),称为方法重载。

    不能用返回值区分,即不能存在两个参数列表相同,返回值不同的方法。因为调用的时候编译器不知道调用哪一个。返回值类型可以改变。

  • 递归方法:一个方法本身直接或间接的调用自己。
    必须满足:①边界条件(至少有一条初始定义是非递归的);②递推通式

  • 字符串:String类,引用类型。存储字符串常量,连接字符串时要重新分配空间保存运算结果字符串。

    java中的String和String常量池

三 类的封装继承和多态

面向对象基础:类、封装、继承、重写和重载、多态、抽象类、接口、包

  • 类是引用数据类型,一个对象引用一个实例,含义为对象保存该实例的引用信息,包括首地址、存储单元的存储结构、引用计数等。两个对象之间的赋值是引用赋值,传递的是对象引用,使得两个对象引用同一个实例,没有创建新的实例。
封装
  • 构造方法:创建类的一个实例并对实例的成员变量进行初始化。方法名与类名相同,通过new调用,没有返回值(因为返回对象实例),可以声明多个构造方法。
    Java提供默认构造方法(无参数),对各成员变量按其数据类型初始化。如果类声明了构造方法,则Java不再提供默认的。

  • 拷贝构造方法:其形式参数是实例。MyClass mc = new MyClass(1); //实例化一个对象
    MyClass mc2 = new MyClass(mc); //用mc复制实例

  • 析构方法:public void finalize()释放实例,并执行特定操作。Java有资源回收机制,通常不需要析构方法。

  • this引用:this指向调用该方法的对象。①构造器中,引用该构造器正在初始化的对象。②方法中,引用调用该方法的对象。

    java 对象的this引用
    static修饰的方法中不能使用this引用。
    1、static修饰的方法是可以通过类来直接调用的,可以在无实例的情况下调用该方法,此时如果方法中有this,则指向的对象可能根本不存在。
    2、static修饰的方法中不能使用this引用,所以static修饰的方法不能访问不使用static修饰的普通成员。
    3、java规定,静态成员不能直接访问非静态成员。
    4、如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。

  • equals和==:equals与==的区别

  • 静态成员:类中的成员分为静态成员(static修饰)、实例成员。
    静态成员属于类,没有创建实例也可以通过类名访问静态成员变量(也能通过对象引用),调用静态成员方法。

    静态成员方法体内不能访问实例成员,不能使用this。不能声明方法的局部变量为static(static在静态存储区,是共享的。局部变量在动态存储区,且只在方法块中有意义,声明static没意义)。

    实例成员属于对象,只有创建了实例才能通过对象访问。
    static/final/abstract/interface

  • 浅拷贝和深拷贝:对于基本数据类型,浅拷贝能够赋值实例(新的存储空间);对于引用数据类型,浅拷贝不能复制对象实例(复制对象指向通一个实例),需要深拷贝。

继承
  • 单继承(一个类只能继承一个父类,但可以继承多个接口;不指定继承时,父类是Object)。

  • 继承原则:

    子类继承父类所有成员变量(包括实例成员变量、静态成员变量)
    子类继承父类除构造方法外的成员方法(实例成员方法、静态成员方法、析构方法)

    访问权限:

    子类不能访问父类私有成员(private),能访问public,protected。能访问当前包中父类的缺省权限成员,不能访问其他包中父类的缺省权限成员。
    子类不能重写父类的final方法。

  • super():子类用super()调用父类构造函数。

    • 子类中所有的构造函数都会默认访问父类中的空参数构造函数,因为子类的构造函数内第一行都有默认的super()语句,super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。
      一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。
      子类不可以继承父类的构造方法
    • 子类默认调用父类构造函数调用的原因是,父类可能有私有字段需要由其构造函数初始化。
      java中的父类和子类的构造函数
    • 这也是为什么final不能修饰构造函数,因为构造方法不是被继承的,所以用final修饰无意义。
多态
  • 子类重定义父类:①重定义父类成员变量,则隐藏父类成员变量(可以用super.成员变量引用父类同名成员变量)。②重定义父类成员方法,如果参数列表和返回值类型都相同,则覆盖父类成员方法。如果参数列表不同,则重载父类成员方法。如果参数列表相同而返回值类型不同,编译器报二义性语法错误。

  • 根据何时确定执行多态方法中的哪一个,分为编译时多态,运行时多态
    编译时多态:①方法重载,根据实际参数的类型、个数、次序,在编译时能够确定执行重载方法中的哪一个。②方法覆盖,当对象引用本类实例时为编译时多态,否则是运行时多态。

    运行时多态:父类对象引用子类实例时,在运行时确定所引用对象的实际类型。

  • 多态的实现:重载、重写、接口、抽象类和抽象方法;

抽象类
  • abstract修饰,抽象类方法只有方法声明没有方法体(有方法体编译器会报错)。
  • 抽象类不能被实例化。
  • 抽象类不一定全是抽象方法。有抽象方法的类必须声明为抽象类。
  • 继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
  • 构造方法、静态成员方法不能声明为抽象方法。

    java的抽象方法为什么不能是static、final、private?
    我们只定义静态static方法完全OK,因为静态方法是属于类的,所以静态方法必须满足给类调用,如果通过类无法调用,那么这种静态方法肯定是不对的。为了达到这一要求,static方法就必须有方法体,即已经实现了,也就不是抽象方法了。所以静态(static)方法不能是抽象方法,即abstract不能与static同时修饰方法。即没有类抽象方法。

最终类
  • final修饰,最终类不能被继承。最终方法不能被子类重写。
  • 非最终类可以包含最终方法。

四 接口 内部类 泛型

接口
  • 接口interface,一组抽象方法(默认都用abstract修饰,所以接口中不能有构造方法)、常量和内嵌类型的集合。可被多个类继承,接口声明的抽象方法在实现接口的多个类中表现出多态性
  • 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个类可以实现多个接口。
  • 接口不能包含成员变量,除了 static 和 final 变量。(接口中的变量会被隐式的指定为 public static final 变量)
  • 一个接口能继承另一个接口,使用extends关键字。一个接口可以继承多个父接口
    public interface People extends A,B,C
  • 抽象类一般包含多个子类都能使用的方法,接口约定多个互不相关的类之间共同使用的方法。
    类只能继承一个抽象类,类能实现多个接口;接口能继承多个接口。
    抽象类可以给出部分实现,包括构造方法等;接口没有实现部分,也不能有构造方法。
内部类
  • 内部类:在一个类内部进行其他类结构的嵌套操作。

    不能与外层类型同名,内部类成员可以与外部类成员同名。
    内部类可以继承父类或实现接口。

  • 优点:
    内部类与外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)。
    内部类是另外一种封装,对外部的其他类隐藏。
    内部类可以实现java的单继承局限。

  • Java内部类的定义、如何创建内部类、内部类的分类、内部类与外部类的关系
    创建
    ①在外部类外部 创建非静态内部类
    语法: 外部类.内部类 内部类对象 = new 外部类().new 内部类();
    举例: Outer.Inner in = new Outer().new Inner();

    ②在外部类外部 创建静态内部类
    语法: 外部类.内部类 内部类对象 = new 外部类.内部类();
    举例: Outer.Inner in = new Outer.Inner();

    ③在外部类内部创建内部类语法
    在外部类内部创建内部类,就像普通对象一样直接创建:Inner in = new Inner();

  • Java中内部类主要分为成员内部类、静态内部类、方法内部类、匿名内部类

泛型
  • 是对类型系统的一种强化措施,通过为类、接口、方法设置类型参数,泛型使一个类或一个方法可在多种类型的对象上进行操作,从而减少类型转化。
API基础

Java核心API

五 异常处理

六 输入输出流

七 网络编程基础

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值