面向对象
1. 构造方法
1.1 编译器提供的无参数构造方法
class Person {
int id;
String name;
int age;
}
class Demo1 {
public static void main ( String[ ] args) {
Person person = new Person ( ) ;
System. out. println ( person) ;
}
}
1.2 用户提供构造方法之后的效果
如果在代码中【显式】定义了构造方法,Java编译器不会在提供无参数构造方法,供程序开发使用。
【要求】
无论何时,定义类,提供对应的无参数构造方法。
2. 封装【重点,规范】
2.1 JavaBean规范封装
要求:
1. 所有成员变量全部私有化!!!
2. 所有的成员变量提供对应的Setter和Getter方法!!!
3. 一定要提供一个无参数构造方法。
2.2.1 权限修饰符
public
公开的,公共的,使用public修饰的成员变量,成员方法,和构造方法都可以在类外通过语法要求格式,来进行操作和使用。
private
私有化,使用private修饰的成员变量,成员方法和构造方法有且只能在类内使用,类外没有操作权限。
class Dog {
public int id;
private String name;
public void test ( ) {
id = 10 ;
name = "八公" ;
testPrivate ( ) ;
}
private void testPrivate ( ) {
System. out. println ( "私有化成员方法" ) ;
}
}
class Demo2 {
public static void main ( String[ ] args) {
Dog dog = new Dog ( ) ;
dog. id = 10 ;
dog. test ( ) ;
}
}
2.2.2 私有化成员变量setter和getter方法完成
setter
给予私有化成员变量进行赋值操作
setter方法格式:
public void set成员变量名(对应成员变量数据类型参数) {
赋值语句;
}
要求:
1. 方法名要求符合小驼峰命名法
例如: String name; ===> setName
2. 参数数据类型要求和成员变量一致,并且建议参数名和成员变量一致。
getter
获取私有化成员变量保存的数据
getter方法格式:
public 对于成员变量数据类型返回值 get成员变量名() {
return 成员变量;
}
要求:
1. 方法名要求符合小驼峰命名法
例如: String name; ===> getName
2.2.3 this关键字解决就近原则问题
this什么是???
在代码中,表示调用当前方法的类对象,或者是new关键字 + 构造方法创建的对象本身。
就近原则问题会在哪里出现:
1. 构造方法
2. setter方法
class SingleDog {
public SingleDog ( ) {
System. out. println ( "Constructor 构造方法 : " + this ) ;
}
public void test ( ) {
System. out. println ( "Method 成员方法 : " + this ) ;
}
}
class Demo4 {
public static void main ( String[ ] args) {
SingleDog sd = new SingleDog ( ) ;
System. out. println ( "Main 方法 : " + sd) ;
sd. test ( ) ;
}
}
public void setName ( String name) {
name = name;
}
public void setName ( String name) {
this . name = name;
}
2.2.4 JavaBean规范代码案例
class Cat {
private String name;
private int age;
public Cat ( ) { }
public Cat ( String name, int age) {
this . name = name;
this . age = age;
}
public void setName ( String name) {
this . name = name;
}
public String getName ( ) {
return name;
}
public void setAge ( int age) {
this . age = age;
}
public int getAge ( ) {
return age;
}
}
3. 局部变量和成员变量
3.1 局部变量
方法大括号以内的变量,都是局部变量
for ( int i = 0 ; i < 10 ; i++ ) {
}
System. out. println ( i) ;
for ( int i = 0 ; i < 10 ; i++ ) {
}
main ( String[ ] args) {
int [ ] arr = new int [ 10 ] ;
test ( arr) ;
}
test ( int [ ] arr) {
System. out. println ( arr) ;
}
for ( int i = 0 ; i < 10 ; i++ ) {
System. out. println ( i) ;
if ( 5 == i) {
int num = 10 ;
}
System. out. println ( num) ;
}
3.2 成员变量
定义在class大括号以内。
描述当前类有哪些属性。
创建对象例如:
Person person = new Person();
new关键字用于申请内存【堆区】空间。并且进行了擦除操作。
3.3 对比
对比 成员变量 局部变量 位置 定义在类大括号以内,其他大括号之外 定义在方法中 作用 用于描述当前类拥有哪些属性 用于方法在运行过程中,数据的临时存储 初始值 成员变量在没有被赋值情况下,对于当前数据类型的"零"值 未赋值不能使用 作用域 哪里持有当前类对象地址,作用域在什么位置 所在大括号范围以内 生存期 成员变量随着对象创建而存在,也会随着对象的销毁而销毁 所在大括号范围以内
3.4 "零"值
一块内存其中所有的二进制位都为0,根据当前内存保存数据类型的情况,对外数据效果不一样,都是对应数据类型的"0"数据.
byte, short, int ==> 0
long ==> 0L
double ==> 0.0
float ==> 0.0F
char ==> '\0' \0 是字符集编号为0的字符,为不可见字符 nul
boolean ==> false
所有的引用数据类型全部 ==> null
NullPointerException 自行解决,实在不行,群里50红包,召唤苟磊解决。
3.5 对象销毁 ==> JVM GC机制