Java学习笔记

第3章 控制程序流程

3.1 使用java运算符

3.1.1优先级

3.1.2赋值

3.1.3算术运算符

3.1.4自动递增和递减

3.1.5关系运算符

3.1.6逻辑运算符

3.1.7按位运算符

3.1.8移位运算符

3.1.9if..else

3.1.10 逗号运算符

3.1.11字串运算符+

3.1.12运算符常规操作规则

3.1.13造型运算符

3.2执行控制

3.2.1真和假

3.2.2if…else

return关键字两方面的用途:指定一个方法返回值;直接返回;

3.2.3反复

while,do,…while,for

3.2.6中断和继续

break,continue
break用于强行退出循环,不执行循环中剩余的语句
continue则停止执行当前的反复,然后退回循环起始和,返回新的反复

3.2.7开关

switch(){
case :

break;
case :

break;
default:语句

}

第4章 初始化和清除

4.1用构建器自动初始化—构造方法

4.2方法重载

不能根据返回值类型来区分重载的方法

4.2.4默认构造方法
4.2.5this关键字

(只能在方法内部使用)
如果希望返回当前对象,则return this;

1在构造器里调用构造器
使用this关键字
如,this.name=name
当前对象的name属性=参数列表中的name

static的含义
不可从一个static方法内部发出对非static方法的调用,尽管反过来说可以

4.3清除:收尾和垃圾收集

4.3.1finalize()用途何在

垃圾收集只跟内存有关
垃圾收集器存在的唯一原因是为了回收程序不再使用的内存。

4.3.2必须执行清除

绝对不能直接调用finalize(),尽量避免用它

4.4成员初始化

一个类的所有基本类型数据成员都会保证获得一个初始值

规定初始化

4.4.2构造函数初始化

初始化顺序
先构造哪一个,只要涉及到该构造的就先执行

静态数据的初始化

static{
//静态代码块,仅执行一次,优先执行
}
static int i;//静态成员

非静态实例的初始化

数组的初始化

///:~

int[] a;
a=new int[3];

多维数组

int[][] a1={{1,2,4},{3,4,6}};

第5章 隐藏实施过程

导包

java源码文件,编辑单元
么个编译单元都必须有一个以.java结尾的名字。
而且在编译单元的内部,可以有一个公共类,它 必须
拥有与文件相同的名字

一个有效的程序就是一系列.class文件,它们可以封装到一个
jar文件里。java解释器负责对这些文件的寻找、装载和解释

package mypackage;
package语句必须作为文件的第一个非注释语句出现。
该语句的作用 是指出这个编译单元属于名为package的一个库的一部分

java解释器的工作程序如下:
首先,它找到环境变量classpath。
classpath包含了一个或多个目录,它们作为一种特殊的 根 使用
从这里展开对.class文件的搜索。
从那个根开始,解释器会寻找包名,并将每个点好替换成/
从而生成从classpath跟开始的一个路径名
随后将它们连接到一起,称为classpath内的各个条目

以后搜索.class文件时,就可从这些地方开始查找与准备创建的
类名对应的名字

四种权限修饰符

接口
(一种模型,具体由实现类去操纵,调用即可)

类访问
1每个编译文件都只能有一个public类
2public类的名字必须与包含了编译单元的那个文件的名字完全相符
3可能有一个编译单元根本没有任何公共类

1私有创建一个对象,提供static方法,返回该对象
2只允许创建一个对象

类再生

代码复用
1新类里简单地创建原有类的对象,合成
2继承

继承肯定就会调用父类的构造方法,由父亲才有儿子

初始化基础类

合成与继承的结合

名字的隐藏

无论在继承的那一级,重载都会生效和可以调用

到底选择合成还是继承?

如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常合成
如选择继承,就需要取得一个现成的类,并制作他的一个特殊版本

上溯造型

父类的方法中参数通过子类对象通信

父类方法的参数放父类对象,也可以直接放子类对象

判断到底应该继承还是合成,考虑是否 需要 从新类 上溯造型 回基础类

是否需要将子类对象转换为父类对象?(选择继承的标准)

将子类对象转换成父类对象 的行为是 上溯造型

final关键字

数据、方法以及类

数据
1编译期常数,它永远不会改变
2运行期初始化一个值,我们不希望它发生变化

句柄–引用

final static基本类型,名字根据规则要全部大写

空白final
强行我们对final进行赋值处理,确保字段在使用前获得正确的初始化

final自变量
作为参数,引用类型的,不能重新创建对象

final方法:两方面的考虑,第一个是为方法“上锁”,防止任何继承类改写
不允许重写就可以这样;
第二个是程序执行的效率

final类
不能被继承

初始化和类加载
补充:java的代码块
普通代码块:直接一个方法中出现的{}
构造代码块:{}
静态代码:static{}只执行一次,优先执行,用于初始化
同步代码块:多线程

继承初始化

第7章 多形性

上溯造型
问题的引出

加入只写一个方法,将 基类作为自变量或参数

那个子类需要,就调用,转型

方法调用的绑定
Animal a=new Dog();//上溯造型

Dog d=(Dog) new Animal

扩展性

重载与重写

抽象类与抽象方法

抽象类不能实例化。通过继承它,实现它的抽象方法。继承用的。

如果一个类里包含了一个或多个抽象方法,类就必须指定为抽象

抽象类 继承抽象类,不用必须重写基类的抽象方法

接口
使抽象的概念更深入了一层
创建类的形式:方法名、自变量列表、返回类型,不包括方法体

建立类和类之间的一个 协议
接口中的常量可以直接通过 接口名.常量访问

参数列表是接口,传参找其实现类 的实例化对象
其实现类 的对象作为具体实现,传到参数列表

只有在必须使用方法定义或者成员变量的时候,才考虑采用抽象类

接口可以继承接口,通过继承扩展

可以在接口中进行常数分组;

内部类
一个外部类拥有一个特殊的方法,它会返回指向一个内部类的引用
也就是说,外部类提供一个方法,其返回值类型是内部类,然后可利用该对象操作内部类

内部类和上溯造型

一个类,其第一个内部类继承了某个类,第二个内部类实现了接口
提供了两个方法,第一个返回接口,第二个返回基类

调用的时候:先创建外部类的对象,然后调用外部类的方法,这样返回值类型就可以是接口和基类

方法和作用域中的内部类

创建内部类的原因:
1准备实现某个形式的接口,使自己能创建和返回一个引用
2要解决复杂的问题,并希望创建一个类,用来辅助自己的程序方案
同时不愿意把它公开

也可以在方法中定义内部类

如何在任意作用域内嵌套一个内部类

匿名内部类---匿名对象

return new 类名(){};

分号相当于包含匿名类的表达式的结束.

匿名内部类没有构造函数,如果相对其中的一个对象进行某种形式初始化,
185页

链接到外部类

static内部类(不存在一个static内部类)
由于存在一些限制:由于static成员只能位于一个类的外部级别,所以
内部类不可拥有static数据 或 static内部类

为了创建内部类的对象,而不需要创建外部类的一个对象
那么可将所有东西都设为static
为了能正常工作,同时也必须将内部类设为static

通常,static内部类只位于接口的命名空间内部
即,接口内可以定义静态类
调用的时候,接口名.静态内部类名 对象=new 接口名.静态内部类名();

静态内部类中可以包含main方法

引用外部类对象

从内部类继承

当我们从外部类继承的时候,没有任何额外的内部类继续下去

内部类标识符

为什么要用内部类:控制框架

192页的实例

构建器和多形性

构建器的调用顺序

一个复杂的对象,构建器的调用按如下顺序:

1调用基础类构建器。这个步骤会不断重复下去,首先得到构建的是
分级结构的根部,然后是下一个衍生类,等等,直到抵达最深一层的衍生类

2按声明顺序调用成员初始化模块

3调用衍生构建器的主体
199

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值