java复习

Java复习

数据类型

byte 占一个字节。

short 占2个字节

int 占4个字节

long 占八个字节

float 占4个字节

double 占2个字节

char 占2个字节

boolean 占一个字节

数据转换

低-------------------------------------------------------------------------------------------->高

byte --> char --> int --> long --> float --> double

运算符

& 按位与 把2个数字所有的二进制位想与

| 按位或
按位反

^ 按位异或 (相同为0,不同为1)

> > 有符号数,右移的时候 符号位一起移动。正数最高位为0 最高位补0,负数最高位为1 最高位补1

>>> 左边移空的改为都补0

函数的重载

要求:

  1. 形参个数
  2. 形参顺序
  3. 形参的数据类型

这三个至少有一个是不一样的

什么是类

把一类事物的静态属性和动态可以执行的操作组合在一起所得到的这个概念就是类

类是抽象的,用来模拟一类事物,是一个概念

什么是对象

类的一个个体

具体的,实实在在存在的事物

生命周期是短暂的,会生成和消亡

类的访问控制符
  • public:可以通过外部访问的方式访问类内部public成员
  • protect:不可以通过外部访问的方式访问类内部的private成员
  • 默认
  • private

在一个类的内部,所有的成员可以相互访问,访问控制符是透明的。访问控制符是针对外部访问而言的

类的构造函数

特点:

  1. 函数名与类名相同
  2. 不能有返回值
  3. 可以有参,也可以无参
  4. 可以有多个

**说明:**声明一个对象,系统首先为该对象分配内存,然后立即自动调用该对象的构造函数

注意:

  1. 任何一个类对象被生成的时候一定会调用该类的构造函数
  2. 无论一个类有多少个构造函数,生成一个类对象一定只会调用其中的某一个构造函数
成员变量类型初始值
byte0
short0
int0
long0L
float0.0F
double0.0D
char‘\u0000’ (表示为空)
booleanFalse
All reference typeNull

构造函数数据成员赋值问题

系统会先执行定义时赋的初值,然后再执行构造函数中赋的初值

一旦为类定义了构造方法,系统就不再提供默认的构造方法

this

是一个系统隐含的指针被自动附加在非静态的成员函数参数列表中

当前时刻,那个对象调用该函数,this就执行当前调用该函数的对象,系统会自动在该函数的参数列表中添加一个隐藏的this指针,并且把调用该函数的对象的地址赋给this指针,这样在函数内部通过this就可以访问当前正则调用该函数的对象的成员

  • 在普通方法中,关键字this代表方法的调用者,即本次调用了该方法的对象
  • 在构造方法中,关键字this代表了该方法本次运行所创建的那个新对象

静态函数内部,没有this指针

static

静态成员属于类本身的,而不是属于对象,被类的所有对象所共用

基本不创建对象,也可以使用被本身的静态成员

静态成员分:

  • 静态数据成员
  • 静态方法成员

使用静态成员的2种方式

  • 类名.静态成员名
  • 类对象.静态成员名
static方法

在静态方法里,只能直接调用同类种其他的静态成员(包括变量和方法),而不能直接访问类种的非静态成员。这是因为,对于非静态方法和变量,需要先创建类的实例对象后,才可以使用,而静态方法在使用前后不用创建任何对象

静态方法不能以任何方式引用this和super关键字。因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。

静态方法只能访问类的静态成员

但是非静态方法取可以访问类种所有成员,包括静态成员

继承

一个新类从已有的类哪里获得其已有的属性和方法

好处:

  • 代码得到极大的重用
  • 形成一种类的层次体系结构
  • 为多态创造条件

利用继承可以较好的模拟出现实事物之间的联系

同包继承权限问题

子类的所有方法内部都可以访问父类除私有成员变量以外的所有成员。所谓子类的所有方法也包括子类的私有方法

通过子类对象名可以访问:

  • 父类除私有成员外的所有成员
  • 子类本身的除私有成员外的所有成员
  • ps:私有成员包括私有属性和私有方法

子类可以继承父类除私有成员变量以外的所有成员

父类的私有成员不可以被子类继承,其他的成员都可以被子类继承

publicprotecteddefaultprivate
同包同类????
同包不同类???
同包不同类继承???
不同包继承??
不同包无关系?

在同一个包中只有私有的不能被另-一个类访问,也只有私有
的不能被继承

在不同包没有任何关系的两个类,只有public类的public成
员才可以被另一个包中的类访问

在不同包中有继承关系的两个类,只有public类的public成
员和public类的protected成员可以被另一一个包中的子类在
内部使用,但是在子类的外部,通过子类对象名只能访问父
类的public成员

Java只支持单继承,不允许多重继承

可以有多层继承

子类可以继承父类所有的成员变量和成员方法,但子类永远无法继承父类的构造方法

在子类的构造方法种可以使用super(参数列表)调用父类的构造方法

super

调用父类的构造函数的语句必须借助于super(实参列表),不能直接写父类的类名

每个子类构造方法的第一条语句,都隐含的调用superz()

如果显示的写出super();语句,则必须保证该语句是第一条语句,并且保证父类有无参的构造方法

既可以显示写super();前提是父类必须是有无参的构造函数

也可以显示写super(实参);前提是父类必须有带参的构造函数

一个子类的任何一个构造函数种都只能出现一个super(实参)

方法重写

指在子类种重新定义父类中已有的方法

重写方法必须和被重写方法具有相同的名称,参数列表和返回值类型

覆盖方式时,不能使用比父类中被覆盖的方法更严格的访问权限

意义:如果子类对继承自父类的方法不满意,就应该重写父类的方法

多态

一个父类的引用类型变量它既可以指向父类对象也可以指向子类对象,它可以根据当前时刻指向的不同,自动调用不同对象的方法。这就是多态

优点:同一段代码做不同事情

子类对象可以直接赋给父类引用,但父类对象在任何情况下都不可以直接赋给子类引用

通过父类引用只能访问子类对象从父类继承过来的成员

通过父类引用不能访问子类对象所特有的成员

父类引用永远不可能直接赋给子类引用

  • 只有在父类引用本身指向的就是一个子类对象时,才可以把父类引用强制转换为子类引用
  • 其他情况下不允许把父类引用强制转换为子类引用,否则运行时会出错

抽象

利用抽象类是为了更好的对类加以分类。

抽象方法

在定义java方法的时候可以只给出方法头而不给出方法内部实现代码,这样方法就是抽象方法

没有方法体的方法必须使用关键字absteract修饰为抽象方法

凡是含有抽象方法的类都必须声明为抽象类

抽象类

用abstract关键字来修饰一个类时,该类叫做抽象类

包含抽象方法的类必须声明为抽象类

抽象类不一定有抽象方法,有抽象方法的一定是抽象类

不能new出一个抽象类对象,但是可以定义一个抽象类的引用

抽象类也可以实现多态

Final

可以修饰

  1. 整个类 :表示该类不可以被继承
  2. 类中的若干属性:表示该属性必须被赋值并且只能赋值一次(默认值不算真正赋值)
  3. 类中的若干方法:表示该方法可以被子类继承,但是不可以被子类重写

接口

就是抽象方法和常量值的集合,从本质来说,接口就是一种特殊的抽象类

接口中定义的属性必须是public static final的,而接口中定义的方法则必须是public abstract的,因而这些修饰符可以部分或者全部省略

接口中定义的属性的值在实现类中不能被更改

一个类只能实现某个接口,不能继承耨个接口

但接口可以继承多个接口

如果一个类只实现了一个接口的部分方法,则该类必须的声明为抽象类

不可以new接口对象,但可以定义一个接口引用类型变量并将其指向实现接口的对象,达到多态的目的

接口的作用

通过接口可以实现不相关类的相同行为

接口提供了不同对象进行协作的平台

接口可以实现多继承

接口是我们了解一个类功能的重要途经

接口与抽象类区别

接口中的方法不允许有方法体,但抽象类却允许

Java类不允许多继承,接口允许多继承

异常

异常的处理机制
  1. 当Java程序运行时 出现问题时,系统会自动检测到该错误
    并立即生成-个与该错误对应的异常对象
  2. 然后把该异常对象提交给Java虚拟机
  3. Java虚拟机会自动寻找相应的处理代码来处理这个异常,
    如果没有找到,则程序终止
  4. 程序员可以自己编写代码来捕捉可能出现的异常,并编写代
    码来处理相应的异常
异常的分类
  1. Error:
    由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,Java
    程序无法对此错误进行处理。
  2. Runtime Exception:
    Java虚拟机在运行时生成的异常,如被0除等系统错误、数组下标超
    范围等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响
    太大。因此由系统检测,用户可不做处理,系统将它们交给缺省的异
    常处理程序(当然,必要时,用户可对其处理)。
  3. Exception:
    一般程序中可预知的问题,其产生的异常可能会带来意想不到的结果,
    因此Java编译器要求Java程序必须捕获或声明所有的非运行时异常
Finally的作用
  1. 无论try所指定的程序块中是否抛出异常,也无论catch语句
    的异常类型是否与所抛弃的异常的类型一致,finally中 的代码
    一定 会得到执行
  2. finally语句为异常处理提供一一个统一 的出 口,使得在控制流程
    转到程序的其他部分以前,能够对程序的状态作统一的管理
  3. 通常在finally语句中可以进行资源的清除工作,如关闭打开的
    文件、删除临时文件等
注意问题
  1. 所有的catch只能有-一个被执行
  2. 可能所有的catch都没有执行
  3. 先catch子类异常再catch父类异常
    如果先catch父类异常再catch子类异常,则编译时会报错
  4. catch与catch之间是不能有其他代码的
  5. 重写方法抛出异常的范围不能大于被重写方法排除的
    异常范围
toString方法
  1. 所有的类都默认自动继承了Object类
  2. Object类中的toString方法返可的是类的名字和该对象哈希
    吗组成的一个字符串
  3. System.out.println(类对象名);
    实际输出的是该对象的toString()方法所返回的字符串
  4. 为了实际需要,建议子类重写从父类Object继承的toString
    方法
equals

所有类都从Object类中继承了equals方法

Object中的equals方法是直接判断this和obj本身的值是否相等,即用
来判断调用equals的对象和形参obj所引用的对象是否是同一-对象,所
谓同一对象就是指是内存中同一块存储单元,如果this和obj指向的是同
一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则
返可false,注意:即便是内容完全相等的两块不同的内存对象,也会返
回false
如果是同一块内存,则Object中的equals方法返回true,
如果是不同的内存,则返回false

何时需要重写equals方法

用一个类构造出来的不同内存的两个对象,如果内存中的值.
相等,我们一般情况下也应该认为这两个对象相等,很明显;
Object中的equals()无法完成这样的重任,Object中 的
equals()方法只有在两个对象是同- -块内存时,才返回true,
这时候我们就有必要重写父类Object中的equals方法

如果希望不同内存但相同内容的两个对象equals时
返回true, 则我们需要重写父类的equals方法

String 与StringBuffer

java.lang.String类对象表示不可修改的Unicode编码字符串

String类已经重写了Object的equals方法

String类的equals方法是用来判断两个对象的内容是否相等,

Object类的equals方法是用来判断两个对象是否是同一个
对象

注意==和equals的区别

String类常用方法

public char charAt (int index)
返可字符串中第index个字符。
public int length ()
返可字符串的长度。
public int index0f (String str)
返回字符串中出现str的第-一个位置
public int indexOf (String str ,int fromIndex)
返回字符串中从fromIndex开始出现str的第-一个位置
public boolean equalsI gnoreCase (String another )
比较字符串与another是否-样(忽略大小写)
public String replace (char oldChar , char newChar)
在字符串中用newChar字符替换oldChar字符

public boolean startsWith (String prefix)
判断字符串是否以prefix字符串开头
public boolean endsWith (String suffix)
判断字符串是否以prefix字符串结尾
public String toUpperCase ()
返问一个字符串为该字符串的大写形式
public String toLowerCase ()
返回一个字符串为该字符串的小写形式
public string substring (int beginIndex)
返回该字符串从beginIndex开始到结尾的子字符串
public string substring (int beginIndex ,int endIndex)
返问该字符串从begi nIndex开始到endIndex结尾的子字符串

public static String valueOf… )

可以将基本类型数据转换为字符串;

public String[ split(String regex)可以将- - -个字符串按照指定的分隔
符分隔,返回分隔后的字符串数组。

StringBuffer
  1. String类对象- -旦创建就不可更改
  2. 如果经常对字符串内容进行修改,则使用StringBuffer.
  3. 如果经常对字符串内容进行修改而使用String的话,就会导
    致即耗空间又耗时间!

因此String类中没有修改字符串的方法,但是
StringBuffer类中却有大量修改字符串的方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值