JAVA 学习笔记
写在前面:
堆内存和栈内存:
当一个方法执行的时候,每个方法都会建立自己的内存栈,在这个方法内定义的变量会逐个放入这块栈内存中,随着方法执行的结束,栈内存也将自然销毁,所有在方法中定义的局部变量都是定义在栈内存中的,在程序中创建对象时,这个对象将会保存在运行时的数据区中,以便反复利用(因为对象的创建成本通常比较大),这个运行时的数据区就是堆内存。
堆内存中的对象不会随方法的结束而销毁,即便这个方法结束后,这个对象还可能被另一个对象所引用(这个方法在参数传递时很常见),则这个对象依然不会被销毁,只有当一个对象没有任何引用变量指向他时,系统的垃圾回收器才会在合适的时间回收他。
一、 数据类型和变量
数据类型
(1)分为两大类
基本数据类型和引用数据类型
(2)基本数据类型
byte: 字节类型,存储容量为1字节=8位, 整数范围 -128 ~ 127
short: 短整形,存储容量2字节=16位,整数范围-2^15 ~ 2^15 - 1
int: 整形, 存储容量4字节=32位,整数范围-2^31 ~ 2^31 - 1
long: 长整型, 存储容量8字节=64位,整数范围-2^63 ~ 2^63 - 1 整数如果大于int的范围必须在整数的后面加“ L ”或“ l ”
float: 单精度浮点数, 存储容量为4字节 = 32位, 最大能精确到7位到8位,小数后面必须加” f “
double: 双精度浮点数, 存储容量为8字节 = 64位,最大能精确到15到16位
char: 字符类型, 存储容量为2字节,有且仅能存储一个符号。 数据类型必须用“”括起来
boolean:布尔类型, 存储容量为一位,只有两个值,true和false。
(3)引用数据类型
分为:数组,类,接口
二、 数组
1. 数组的特点
(1)数组中的数据可以是任何类型。
(2)一组数据必须类型相同。
(3)数组的长度,固定不变。
2. 数组的存储原理
数组是一种存储数据的数据结构,数组创建时,首先要确定其长度,然后根据长度来划分元素空间。每个元素中可以放一条数据。
3.数组元素的缺省值
1. 基本类型
byte 、short 、int 、long 0
float 、double 0.0
char 单个空白字符
Boolean false
2. 引用类型
缺省值全为null
3. 关键字和保留字

三、面向对象
1. 什么是面向对象编程
根据问题,进行分析;
根据问题,定义模板(抽象成类);
通过类,创建对象;(实例化, 实例=对象);
使用独享的属性和方法,解决问题;
当解决一个问题的时候,会先将问题抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋予一些属性和方法,然后让每个对象去执行自己的方法来解决问题。就比如开冰箱,面向过程就是先开冰箱门,拿东西,关门这三个函数依次执行,面向对象就是先抽象成两个类:人和冰箱,人有拿东西的方法,冰箱有开门和关门的方法,想要完成这个步骤就要先执行冰箱.开门,人.拿东西,冰箱.关门。
2. 创建对象
类名 对象名=new 类名();
每new一次,都会产生一个新对象,在堆内存中存储。
3. 创建对象的底层理解
4. 使用对象
(1) 语法
对象名.属性名
对象名.方法名(..)
1 | p.name="老于"; |
(2) 原理
p.jianfei();
通过p中保存的首地址,找到对应堆内存中的对象。
然后,找到该对象的属性和方法 ;
最后,执行属性和方法体;
5. 变量
(1) 变量
Java中用来存储数据的容器。
变量的特点:存储的数据可以改变。
(2) 变量的分类
成员变量: 定义在类中,方法体外的变量。是对象的属性。
局部变量: 只能用于定义他的方法体内,在其他的方法体中无法访问。
(3) 缺省值
成员变量:有缺省值。
byte short int long 0
float double 0.0
char 空白字符
boolean false
引用类型 null
局部变量:没有缺省值。
null的含义:null是一种引用类型的数据,表示没有对象的地址!!!
(4) 修饰符
成员变量:可以使用任何修饰符修饰。
局部变量:只能使用final。
6. 类、构造函数、方法、成员变量和局部变量的可用修饰符
修饰符 | 类 | 成员访求 | 构造方法 | 成员变量 | 局部变量 |
---|---|---|---|---|---|
abstract(抽象的) | √ | √ | — | — | — |
static(静态的) | — | √ | — | √ | — |
public(公共的) | √ | √ | √ | √ | — |
protected(受保护的) | √ | √ | √ | — | |
private(私有的) | — | √ | √ | √ | — |
synchronize(同步的) | — | √ | — | — | — |
native(本地的) | — | √ | — | — | — |
transient(暂时的) | — | — | — | √ | — |
volatile(易失的) | — | — | — | √ | — |
final(不要改变的) | √ | √ | — | √ | √ |
7. 修饰符对应的作用
类 修饰符 | 作用 |
---|---|
public | 可以从其他类中访问 |
abstract | 本类不能被实例化 |
Final | 不能再声明子类 |
构造函数修饰符 | |
public | 可以从所有类中访问 |
protected | 只能从自己的类和他的子类中访问 |
Private | 只能在本类中访问 |
域/成员变量修饰符 | |
public | 可以从所有类中访问 |
protected | 只能从自己的类和他的子类中访问 |
Private | 只能从本类中访问 |
Static | 对该类的所有实例只能有一个域值存在 |
transient | 不是一个对象持久状态的一部份 |
volatile | 可以被异步的线程所修改 |
final | 必须赋予初值并且不能修改 |
局部变量 修饰符 | |
final | 必须赋予初值并且不能修改 |
方法修饰符 | |
public | 可以从所有类中访问 |
protected | 只能从自己的类和他的子类中访问 |
Private | 只能从本类中访问 |
abstract | 没有方法体,属于一个抽象类 |
final | 子类不能覆盖他 |
static | 被绑定为类本身而不是类的实例 |
native | 该方法由其他编程语言实现 |
asnchronized | 在一个线程调用前必须先给他加 |
8. 面向对象的特点
(1)封装
- 封装的概念
将类中的成员(属性,方法,构造器)设为private,只能在当前类中访问,外部无法访问
- 企业的封装
主要用于属性的封装。
讲个属性设为私有,提供公有的getter和setter方法来访问。
- 封装的优点
保证属性中数据的完整性
(2)继承
- 继承的概念
子类继承父类的属性和方法。
继承之后,在子类中就不需要再定义父类中的属性和方法
- 继承的优点
减少代码的编写,提高了代码的重用性
- 继承的范围
子类只继承父类的属性和方法,不继承父类的构造器。
方法的重写
子类继承父类的方法,但是该方法无法满足子类的需求,我们可以重新定义该方法。这个过程叫方法的重写
重写的原则
方法名相同
参数相同
返回值类型相同
访问修饰符 >= 父类的范围
(3)多态
概念
多态,顾名思义:多种形态。
一个方法在执行时,根据传入对象的不同,执行结果不同。
向上转型和向下转型
向上转型
【子类的对象】由子类型转为父类型。
该对象只能访问父类继承的属性和方法,如果该方法被重写,访问重写之后的。
子类中扩展的属性和方法不能访问。
向下转型
【子类的对象】由父类型转为子类型
该对象可以访问父类继承的属性和方法,如果该方法被重写,访问重写之后的。
还可以访问子类中扩展的属性和方法。
多态产生的条件
继承关系
方法的重写
向上转型
多态的优点
提高代码的重用性
- 降低程序的耦合度
9. super关键字
(1) super的第一种用法
当子类中的属性和方法,与继承的父类的属性和方法重名了。
我们在子类中,直接访问是子类中定义的属性和重写的方法。
如果在子类中,我们想要访问父类被隐藏的属性和方法,需要使用super调用。
super表示子对象的super区!!
(2) super的第二种用法
super表示父类构造器
如果你不想使用父类无参构造器来构建super区,那么必须需要使用:super(实参)来指定。
如果调用的是父类无参构造器,使用super();,可以省略不写。
注意:super(..)必须是子类构造器中的第1条语句!!!
Servlet的生命周期
servlet的声明周期就是从servlet出现到销毁的全过程。主要分一下几个阶段:
加载类 -> 实例化(为对象分配空间)-> 初始化(为对象的属性赋值) -> 请求处理(服务阶段) -> 销毁
服务器启动时(web.xml中配置load-on-startup=1,默认为0,其中0是第一次请求servlet的时候在加载servlet执行此方法,1是开启容器就执行),也就是执行init方法,这个servlet对象会去处理所有的客户端请求,service(ServletRequest req,ServletResponse res)
方法可以判断客户端提交的请求是什么,进行不同的处理,在服务器关闭的时候执行delete()方法销毁这个servlet对象
1 | public class EmpServlet extends HttpServlet{ |