一、引用类型
1、除基本类型之外 ,都称之为引用类型
2、Java的对象和数组是通过引用对其操作的。
a、引用可以理解为一种受限的指针
b、指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,只能进行赋值运算。
c、引用就是一个变量或对象的别名,引用本质是一个对象。指针是一个段内存空间的地址,指向存储一个变量值的空间,或
一个对象的空间。
二、JVM的栈、堆、方法区
栈:
存放:局部变量
先进后出,自下而上存储
方法执行完毕,自动释放空间。
堆:
存放new出来的对象
需要垃圾回收器来回收:System.gc()
方法区:
存放 类的信息(代码)、static变量、字符串常量等
三、类的构造方法(构造器)
构造器的方法名必须与类名一致、构造器本身是有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用 return
1、类创建是无自定义的构造方法的情况下,系统提供默认的无参的构造方法。
2、自定义构造方法,方法名与类名一致,可以重载。且自定义构造方法后,系统不再提供 默认的无参构造方法,只能手动添加无参的构造方法。
3、this关键字是对一个对象的默认引用,用以区分同名局部变量。
4、构造方法不能有返回值类型,如定义了与类名一样的方法带有返回类型,那么这个方法就不是构造方法,也就不能用于new 对象。
public class Penguin {
String name = null;
int health = 0;
String gender = null;
public void Penguin(){
health = 10;
gender = "雄";
System.out.println("执行构造方法");
}
public void Penguin(String name, int health){
this.name = name;
this.health = health;
System.out.println("执行带参的构造方法");
}
public void print(){
System.out.println("......");
}
public static void main(String[] args) {
Penguin penguin = new Penguin();
penguin.print();
Penguin gg = new Penguin("红企鹅", 1);//此处会报错
}
}
四、this关键字
1、this的作用
a、this表示的是当前对象本身。更准确地说,this代表当前对象的一个引用
2、普通方法中使用this
a、区分类成员属性与类方法的形参。
b、调用当前对象的其他方法(可以省略)
c、位置:任意
3、构造方法中使用this
a、使用this来调用 其它构造方法
b、位置:必须是第一条语句
4、this不能用于static方法。this代表的是对象,即需要先new出对象。static是类的方法,在new出对象前可以调用,所以不可以。
public Penguin(){
health = 10;
gender = "雄";
System.out.println("执行构造方法");
}
public Penguin(String name){
this.name = name;
}
public Penguin(String name, int health){
this(name);//this调用一个参数的构造方法
this.health = health;
System.out.println("执行带参的构造方法");
}
五、static关键字
1、不需要对象,就可以调用。(类名.方法名)
2、在调用static的方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员
3、静态方法不能以任何方式引用this和super关键字。
4、在方法里不可以定义static变量。
Static示例代码
public class TestStatic {
int a;
static int width;
static void gg(){
System.out.println("gg");
}
void tt(){
System.out.println("tt");
}
public static void main(String[] args){
TestStatic hi = new TestStatic();
TestStatic.width = 2;
TestStatic.gg(); //gg();
hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还是使用类名.static成员名来访问。
gg();
}
}
//使用static统计在类中一共产生多少个对象
public class StaticDemo{
static int count;
public StaticDemo(){
count ++;
System.out.println("...")
}
}
六、代码块
1、普通代码块:普通方法里代码块
2、构造代码块:直接写在类中的代码块。每次创建对象的时候会执行。
3、静态代码块:在类中使用static声明的代码块,类第一次被载入时,先执行static代码块;类多次new对象时,类多次载入时,static代码块只执行
一次。经常用来进行static变更的初始化。
注意:是在类初始化时执行,不是在创建对象时执行。
静态初始化块中不能访问非static成员。
不能放在static方法里。
4、同步代码块:多线程
public class CodeDemo {
static {
System.out.println("static 代码块");
}
{
System.out.println("构造代码块001");
}
{
System.out.println("构造代码块002");
}
public CodeDemo(){
System.out.println("构造方法");
}
public void print(){
{
System.out.println("方法中的代码块");
}
}
public static void fn(){
static {//报错
}
}
public static void main(String[] args) {
CodeDemo code1 = new CodeDemo();
CodeDemo codeDemo = new CodeDemo();
}
}
七、JDK中的主要包
java.lang:
包含一些java语言的核心类,如String、Math Integer System Thread,提供常用功能。
java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形
用户界面(GUI)
java.net
包含执行与网络相关的操作的类.
java.io
包含能提供多种输入/输出功能的类。
java.util
包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
八、import
import static:用于导入指定类的静态属性。
import static java.lang.Math.*;//导入Math类的所有静态属性。
import static java.lang.Math.PI;//导入Math类的PI属性。
如上导入后,在程序中直接使用:System.out.println(PI)
九、面向对象的三大特征
1、继承 inheritance
子类可以从父类继承属性和方法。
子类可以提供自己单独的属性和方法
2、封装/隐藏encapsulation
3、多态
十、使用访问控制符,实现封装
1、成员变更或方法的访问权限共四种:
public:公共的,可以被项目中所有的类访问。即项目可见性
protected:受保护的。可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问
default/friendly默认的/友好的。被这个类本身访问;被同一个包中的类访问
private:私有的。类可见性。只能被这个类本身访问。
2、类的访问权限只有两种
public:公共的。可被同一项目中所有的类访问。(必须与文件名同名)
default/friendly默认的/友好的。可被同一个包中的类访问。
十一、继承
1、子类只能继承一个父类。即只有单继承,没有实现多继承,多继承可以通过接口来实现。
2、super关键字
a、super是直接父类对象的引用。
b、可以通过super来访问父类中被子类覆盖的方法或属性。
c、super只能出现在子类的方法和构造方法中。
d、super调用构造方法时,只能放在第一句。
e、super和this不能同时出现在构造方法中。
f、super不能访问父类 的private成员。
g、super和this都不能在static方法中。
3、调用的顺序
普通方法中:任意
构造方法中:类的构造函数中,若没有显式地调用 super(); java会默认加上super()。
如果显式需要放在第一行。
4、继承权限
以下三种情况的父类成员不能被子类继承:
a、不能直接访问private成员
b、子类与父类不在同包,使用默认访问权限的成员。
c、构造方法
5、方法的重写(override)
a、在子类中可以根据需要对从父类中继承的方法进行重写。
b、重写方法必须和被重写方法具有相同方法名、参数列表、返回类型。
c、重写方法不能使用比被重写方法更严格的访问权限。
十二、抽象类、抽象方法
抽象类:不能被实例化
抽象方法:没有方法体。
抽象方法必须在抽象类里。
抽象方法必须在子类中被实现,除非子类是抽象类
十三、final
1、不希望类被继承,定义为final类。public final class Penguin extends Pet{}
2、不希望方法被重写,定义方法为final。public final void print(){}
3、属性值不希望被修改,使用final定义为常量。final String
十四、方法参数的值是否改变
方法中的参数列表叫做形式参数,没有具体的值,只是为了方便在方法体中使用
调用方法的时候实际传入的值叫实际参数,代表具体的数值,用来替换在方法体中代码逻辑的值进行运算
十五、多态
对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)。
规范(多态实现的前提):
1、必须要有继承关系。
2、子类方法必须重写父类的方法。
3、父类引用指向子类对象。
浙公网安备 33010602011771号