第三章
1.流程控制语句
顺序结构,先执行A再执行B 选择结构, 如果....则... 循环结构,如果...则再继续...
任何软件和程序本质都是由 变量 选择语句 循环语句 组成
选择结构
if单选择结构 if-else 双选择结构 if -else if-else多选择结构 switch结构
java.lang包中的Math类提供了一些用于数学计算的方法
Math.random()该方法用于产生一个0-1区间的double类型的随机数,但不包括1
if 语句加{},不然容易出错
if-else双选择结构,逻辑更加严密
switch多值的时候判断 jdk1.7以后switch(里面可以是字符串了)
循环结构 (当型、直到型)
while 先判断后执行 do while 先执行后判断
for循环
1.执行初始化语句:i=1 2.判断i<=100 3.执行循环体 4.步进迭代:i++5.回到第二步继续判断
break 用于强行退出循环,不执行循环中剩余的语句
continue 跳出本次循环,进入下次循环
带标签的break和continue 跳转
2.方法(带名字的语句块)
方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数
形式参数:在方法定义的时候写的
实参:在调用方法的时候写的
返回值:方法在执行完毕后返还给调用它的环境的数据
返回值类型:事先约定的返回值的数据类型,无返回值,必须显示指定为void
方法重载overload
重载的方法,实际是完全不同的方法,只是名称相同而已,
构成重载的条件
方法名相同,形参个数不同,形参类型不同,形参顺序不同 都可以构成重载
只有参数名不同,不构成重载
只有返回值的返回类型不同,不构成重载
3.递归
自己调用自己
递归头(什么时候结束)和递归体(什么时候调用自己)递归特别耗时耗空间
第四章
1.面向过程和面向对象都是对软件分析、设计、开发的一种思想。
面向过程:简单问题,按步骤实现,不需要协作的事务
面向对象:复杂问题,需要很多协作才能完成
对象进化论(量变引起质变)
数据无管理时代-----------------数组管理和企业部门制------------------对象和企业项目制
企业初期只有两个人 人多了,需要管理,同类型数据放一起 项目组,五脏俱全,不同类型
2.对象object或者instance(实例)和类class 实例和对象是一回事
类可以理解为对象的模板,或者类是对象的抽象,
属性(成员变量) 方法(行为特征,功能实现)
类与类之间可以相互调用
3.面向对象的内存分析
Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area 方法区在堆里面
栈的特点:
方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实参、局部变量等)
栈属于线程私有,不能实现线程间的共享
栈的存储特性是,先进后出,后进先出
栈是由系统自动分配,速度快,栈是一个连续的内存空间
堆的特点:
堆用于存储创建好的对象和数组(数组也是对象)
JVM只有一个堆,被所有线程共享
堆是不连续的内存空间,分配灵活,速度慢
方法区(又叫静态区):
JVM只有一个方法区,被所有线程共享
方法区实际也是堆,只是用于存储类、常量相关的信息
用来存放程序中永远不变或唯一的内容。(类信息,class对象、静态变量、字符串常量等)
4.构造方法
构造器也叫做构造方法constructor,用于对象的初始化
要用new关键词调用
构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用
return返回某个值
如果我们没有定义构造器,则编译器会自动定义一个无参拿的构造函数,如果已经定义则编译器不会自动添加
构造器的方法名必须和类名一致
5.垃圾回收
垃圾回收机制,Garbage Collection C++,没有,Java有
发现无用对象,回收无用对象占用的内存空间。
垃圾回收相关算法,1,引用计数法 2,引用可达法(根搜索算法)
分代垃圾回收机制
年轻代,年老代,持久代 JVM将堆内存划分为Eden、Survivor、Tenured/old
年轻代在Eden和Survivor Minor GC清理年轻代
年老代在Tenured和Old Major GC清理年老代
持久代在方法区 full GC清理年轻代和年老代 成本高,对系统性能有影响
垃圾回收过程:新建对象都是在Eden层——Eden满了后,触发Minor GC,清理无用对象,复制剩下
的对象放入Survivor1中,并清理Eden——Eden再次满后,将S1不能清空的对象复制到S2,同时将Eden
中不能清理的复制到S1中,保证Eden和S1均被清空——重复多次(默认15次)还在Survivor中的对象
复制到年老区(Old层)——当old区满了后,会触发一次完整的垃圾回收full GC。
6.对象创建过程4步
分配对象空间,并将对象成员变量初始化为0或者空——执行属性值的显式初始化——执行构造方法
——返回对象的地址给相关的变量
this的本质就是“创建好的对象的地址”由于在构造方法调用前,对象已经创建,因此在构造方法中也
可以使用this代表“当前对象”
构造方法的调用必须放第一行 this不能用于static方法中,static中也不能调用普通方法,因为static
方法存储在方法区,方法区没有对象,堆里才有对象
7.static 关键字
在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个
应用程序执行期间都有效
static修饰的成员变量和方法,从属于类,普通变量和方法从属于对象
静态方法可以调用静态的属性,但是不可以调用非静态的属性和方法
8.静态初始化块
构造方法是对象的初始化, 静态初始化块是类的初始化
静态初始化块执行顺序,1.上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化
块,直到我们的类的静态初始化块为止
构造方法顺序和上面顺序一样
9.参数传值机制
Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”因此,复印件改变不会影响原件
基本数据类型参数的传值
传递的是值的副本,副本改变不影响原件
引用类型参数的传值
传递的是值的副本,但是引用类型指的是”对象的地址“,因此,副本和原参数都指向同一个地址,改变
副本指向地址对象的值,也就意味着原参数指向的对象的值发生了变化
记得补70开始的代码
10.包机制是Java中管理类的重要手段。开发中,我们会遇到大量同名的类,通过包,我们容易解决类重名
的问题,也可以实现对类的有效管理。包对于类,相当于文件夹对文件的作用。
通常是类的第一句话非注释性语句。
包名:和域名倒着写,再加上模块名,便于内部管理
JDK中的主要包
java.lang 核心包,无需导入
java.awt 画窗口包,游戏窗口等
java.net 网络包
java.io io流包
java.util 常用工具包
11.import
导入所有包,会降低编译速度,不会影响运行速度,影响不大
导入多个包里有同名类,直接用原始方法,直接说明是哪个包的,这是极端情况
12.静态导入
静态导入,jdk1.5以后的版本加入的功能
13.面向对象的三大特征:继承、封装、多态。
继承的使用要点
父类也称作超类,基类,派生类
JAVA中只有单继承,没有像C++那样的多继承,多继承会引起混乱,JAVA中只有一个直接父类
JAVA的接口可以多继承
子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类私有属性和方法)
如果定义一个类,没有调用extends,则他的父类是:java. lang. Object
ctrl +t,可以查看类的继承结构
instance of 是二元运算符,左边是对象,右边是类,当对象是右边类或者子类所创建对象时,返回TRUE,否则返回FALSE
14.方法的重写/覆盖override
子类通过重写父类的方法,可以用自身的行为替换父类的行为
重写三要点
方法名,参数列表相同
返回值类型和声明异常类型,子类≤父类
访问权限子类≥父类
object类是所有JAVA类的根基类,也意味着所有的JAVA对象都拥有object类的属性和方法
toString方法
==代表比较双方是否相同,如果是基本类型,则表示值相等,如果是引用类型,则表示地址相等即是同一个对象
equal,提供定义“对象内容相等”的逻辑
15.super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性
16.super()永远位于构造方法的第一句,不管写不写都存在,有个追溯的过程,一直追溯到object类
17.封装的特点:提高代码安全性 提高代码的复用性 “高内聚”封装细节,便于修改内部代码 提高可维护性
低耦合 简化外部的使用,便于调用者的使用,便于扩展和协作
public 权限最大 整个项目都可以访问
protected 同一个包内以及其他包内的子类可以访问
dedault 同一个包内可以访问
private 只能自己的类里可以访问
对于类的属性一般都用private
提供相应的get/set方法来访问相关属性,这些方法通常用public修饰的,以提供对属性的赋值和读取操
作,注意:Boolean类型变量的get方法是is开头
一些只用于辅助本类的方法可以用private修饰,希望其他类调用的方法用public修饰
18.多态
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会
完全不同
多态是方法的多态,不是属性的多态
多态存在的3个必要条件:继承、方法重写、父类引用指向子类对象
父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了
19.final修饰变量,变量不可以被改变,修饰方法,方法不可以被重写,但是可以重载,修饰类,类不可
被继承