目录
一、常用命名方法
二、数据类型与数据存储
1.数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/9b000ef2ecefddee7c4a2b976a465a34.png)
类型 | 占用存储空间 | 表数范围 |
byte | 1字节=8bit位 | -128~127 |
short | 2字节 | |
int | 4字节 | |
long | 8字节 |
2.数据存储
![](https://i-blog.csdnimg.cn/blog_migrate/65836862af4e1d04287d9a419fc07471.png)
虚拟机栈:几位平时提到的栈结构。局部变量存储在栈结构中。
堆:我们将new出来的结构(比如:数组、对象)加载在堆空间中。补充:对象的属性(非static)加载在堆空间中。
方法区:类的加载信息、常量池、静态域。
三、小知识
属性 = 成员变量 = field = 域、字段;
方法 = 成员方法 = 函数 = method;
创建类的对象 = 类的实例化 = 函数 = 实例化类;
四、修饰符
1.权限修饰
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
private | yes | |||
(缺省) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
2.关键字
2.1this关键字
(1)修饰属性、方法、构造器
理解为:当前对象。
在类的方法中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象属性或方法。
(2)this调用构造器
①我们在类的构造器中,可以显式的使用“this(形参列表)”方式,调用本类中指定的其它构造器。
②规定:“this(形参列表)”必须声明在当前构造器的首行。
③构造器内部,最多只能声明一个“this(形参列表)”,用来调用其他构造器。
2.2package关键字
①每“.”一次,就代表一层文件目录。
②使用package声明类或接口所属的包,声明在源文件的首行。
③同一个包下,不能命名同名的接口、类。
2.3import关键字的作用
①使用“XXX.*”方式表明可以调用XXX包下的所有结构。但是如果使用的是XXX子包下的结构,则仍需要显示。
②在一个方法中使用了同名不同类的对象,在new对象的时候,声明其中一个完整包名。
2.4 super关键字
理解为“父类的”。可以用来调用:属性、方法、构造器。
①当子类重写了父类方法或定义了同名的属性时。在子类调用父类被重写的方法或声明的属性,则必须通过使用“super.属性”或“super.方法”的方式,表明调用父类中声明的属性或方法。
2.5 instanceof关键字的使用
a intanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,则返回false。
2.6 static关键字
可以用来修饰:属性、方法、代码块、内部类;
实例变量:创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
static修饰属性的其他说明:
① 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用。
② 静态变量的加载要早于对象的创建。
2.7 final关键字
最终的,可以用来修饰的结构:类、方法、变量
修饰类:此类不能被其他类继承。如:String类、System类、StringBuffer类。
修饰方法:此方法不可被重写,如:Object类中的getClass()。
修饰变量:此时的变量就称为是一个常量,修饰形参时不能重新赋值。
2.8 abstract关键字
抽象的,可以用来修饰的结构:类、方法。
(1)抽象类
①此类不能实例,抽象类中一定有构造器,便于子类实例化时调用。
②开发中都会提供抽象类的子类,让子类对象实例化。
(2)抽象方法
①抽象方法只有方法的声明,没有方法体。
②包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法。
五、面向对象
1.构造器
如果没用显式的定义类的构造器的话,则系统默认提供一个空参的构造器。
定义构造器的格式:权限修饰符 类名(形参列表){}
2.JavaBean
是指符合如下标准的Java类:
>类是公共的
>有一个无参的公共的构造器
>有属性,且有对应的get、set方法
3.继承
父类 person类{吃饭、说话}
子类 student类 extends person类{学习} //吃饭、说话、学习
一旦子类继承父类以后,子类就获取了父类中声明的结构:属性、方法。
(1)好处
①减少了代码的冗余,提高复用性
②便于功能扩展
③为多态性的使用,提供了前提
(2)规定
①一个子类只能有一个父类。
②一个类可以被多个子类继承。
4.重写
(1)应用
重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数方法时,实际执行的是子类重写父类的方法。
(2)规定
①子类重写的方法的方法名和参数列表与父类被重写的方法名和参数列表相同。
②子类重写的方法的权限修饰不小于父类被重写的方法的权限修饰符。
>特殊情况:子类不能重写父类方法中声明为private权限的方法。
③子类重写的方法的返回值类型必须与父类被重写方法保持一致。
④子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
⑤子类和父类的同名同参数的方法要么都声明为非static,要么都声明为static。
5.多态
可以理解为一个事物的多种形态。
(1)对象的多态性
父类的引用指向子类的对象(或子类的对象赋给父类引用)。
(2)多态的使用
虚拟方法调用。
有了对象的多态性以后,我们在编译期,只调用父类中声明的方法,但在运行期,实际上执行的是子类重写父类的方法。编译看左边,运行看右边。
6.代码块
用来初始化类、对象,分为静态代码块和非静态代码块。
6.1 静态代码块
①内部可以有输出语句;
②随着类的加载而执行,而且只执行一次;
③初始化类的信息(作用);
④如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行;
⑤静态代码块的执行要优先于非静态代码块的执行;
⑥静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构;
6.2 非静态代码块
①内部可以有输出语句;
②随着对象的创建而执行;
③每创建一个对象,就执行一次非静态代码块;
④可以在创建对象时,对对象的属性等进行初始化(作用);
⑤如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行;
⑥非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法;
7.接口
使用interface来定义。接口和类是并列的两个结构。
(1)JDK7以前
只能定义全局常量和抽象方法。
全局常量:public static final 的;
抽象方法:public abstract 的;
(2)JDK8
除了上面的,还可以定义静态方法、默认方法。
(3)注意
①接口中不能定义构造器!意味着接口不可以实例化。
②Java类可以实现多个接口。
格式:class AA extends BB implements CC,DD,EE{ }
③接口与接口之间可以继承,而且可以多继承。
(4)知识点
①接口中定义的静态方法,只能通过接口来调用。
②通过实现类的对象,可以调用接口中的默认方法。
8.内部类
Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类。
(1)内部类的分类
成员内部类(静态、非静态)、局部内部类(方法内、代码块内、构造器内)
(2)成员内部类
①作为外部类的成员:
>调用外部类的结构;
>可以被static修饰;
>可以被4种不同的权限修饰;
②作为一个类:
>类内可以定义属性、方法、构造器等;
>可以被final修饰,表示此类不能被继承;
>可以被abstract修饰