思维导图:
1.类和类的实例化:
- 面向对象的思想,Java是一门面向对象的语言,面向对象是解决问题的一种思想,面向对象不关注过程。
- 类的定义需要用到关键字class,类名采用大驼峰的形式,类有成员变量(字段、属性)和成员方法(行为)组成,建议1个Java文件写1个类。public修饰的类必须要和文件名相同。
- 对成员变量赋值的5种方法:在定义成员变量的同时进行初始化叫做就地初始化;成员变量也可以不初始化,那就默认为0;在类外通过对象的引用直接赋值也可以;可以使用构造方法进行初始化;在类外也可以提供get和set方法来完成初始化。
- 成员变量不赋值可以使用,系统默认基本数据类型为0;引用类型为null(boolean类型默认为false,char类型默认为空)。局部变量不赋值的话使用会报错!
- 类的实例化有俩步非常重要的操作。第1步是new一个类的对象出来,为这个对象分配内存;第2步是调用合适的构造方法,构造方法有很多种(无参、多个参数)。
- 类的实例化需要用到关键字new,是在堆上创建的。堆上会存储成员变量的有关信息,不会存成员方法;只有当对象引用了方法,才会在栈帧上开辟空间存放你所调用的方法。实例化多个对象,这些对象之间相互独立,谁都不会影响其他对象,每个对象之间不会冲突,且在堆上开辟的内存地址也不可能一样!
- this引用的是调用成员方法的对象,哪个对象调用了这个成员方法哪个对象就是这个this引用。this引用只能在成员方法中使用,成员变量不能使用。
- this的功能:如果this.属性,代表着访问当前对象的属性。如果this ( );调用当前对象的构造方法,必须注意:this ();的使用必须放到构造方法中并且在构造方法的第一行,不能形成环!如果this.方法名,表示调用当前对象中的成员方法。
2.构造方法:
- public + 类名(),构造方法的名字和类名相同,没有返回值类型,置为void也不行。
- 构造方法的作用是为对象的属性赋值或对对象中的成员初始化,不负责给对象开辟空间。
- 实例化对象调用的其实就是构造方法。如果没有显式定义,编译器会默认生成一个不带参数的构造方法。一旦用户定义了构造方法,编译器便不会再生成。构造方法是可以重载的,根据自己的需求可以构造合适的构造方法。
- 构造方法中,可以使用this来调用其他构造方法,但是this ();必须是第一条语句,且不能形成环,绕来绕去编译器也懵住了!
- 在对象的生命周期内只调用一次,这只是对于单个独立的对象而言。如果有其他的对象也可以正常调用各自的构造方法,只不过也只能调用一次。
3.封装:
- 面向对象程序有三大特性,封装、继承和多态。
- 封装就是对类的实现细节进行了隐藏,同时提供了公开的方法对封装的属性或方法进行交互,提高了安全性,用private来实现,被修饰后只能在当前的类中进行访问,类外是不可以的!简单来说就是“套壳屏蔽细节”。
- 访问修饰限定符:private、default、protected、public。public是谁都可以访问;private是只有在同一个类中才能访问到;default是在同一个包中才可以访问到;
- 包是由不同的类组合成的,类似于文件夹,包名需要小写。
4.static关键字:
- 被static修饰的成员变量称为静态成员变量,其不属于某个具体的对象,是所有对象共享的,不存储在某个对象的空间中。所以访问的时候最好的方法是用类名来访问静态成员变量。
- 静态成员变量存储在方法区中,普通成员变量存储在堆上。静态成员变量随着类的创建而创建,类的销毁而销毁。类变量不能定义在普通方法中。
- 在静态方法里面不可以直接访问非静态的成员变量和成员方法,但是可以传参提供对象的引用来访问非静态成员,或是在静态方法内部实例化一个对象。非静态的可以访问静态的。
- 普通成员方法的()中默认有this,而静态成员方法和构造方法没有。
- 静态成员变量初始化有俩种:就地初始化和静态代码块初始化。就地初始化就是在创建的同时赋值。
5.代码块:
- 使用{ }定义的一段代码就称为代码块。代码块分为普通代码块(本地代码块)、构造代码块(实例代码块)、静态代码块和同步代码块。
- 实例代码块用于初始化实例成员变量,不加修饰符,定义在类的内部方法的外部。
- 静态代码块用于初始化静态成员变量,static定义的代码块。当程序加载到类就会接着加载静态代码块,静态代码块最先被加载进行初始化同时开辟内存空间并且不管new多少个对象出来静态代码块只会执行1次。
- 加载顺序:静态代码块>实例代码块>构造方法。如果有多个静态代码块或实例代码块,需要看定义的顺序,最后被定义的就是结果。
- 实例代码块只有在创建对象时才会执行,而静态代码块在类被创建时就执行。
6.内部类:
- 把一个类定义在某个类的内部,则称这个类是内部类,某个类就是外部类。内部类和外部类公用一个java源文件,编译后内部类会有自己的字节码文件。
- 内部类分为:实例内部类、静态内部类、本地内部类、匿名内部类。
- 实例内部类:未被static修饰的成员内部类。实例内部类中如果定义静态成员变量必须加final否则会报错;实例内部类中不能定义一个静态的方法;实例内部类中可以任意访问外部类中的成员和方法;实例内部类当中访问和外部类同名变量的时候优先访问自己的;实例内部类的创建必须依赖于外部类;外部类不能直接访问实例内部类中的成员,必须先创建内部类的对象才可以做到。实例内部类中包含外部类的this引用。
- 静态内部类:被static修饰的成员内部类。不能在静态内部类中直接访问外部类的非静态成员;创建静态内部类时不需要先创建外部类对象,创建实例内部类则不然!
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹