面向对象到Static关键字总概
一:函数(方法)部分
函数调用时的重载
1:定义两个相同类型的变量名(函数变量)
public static int comNum(int a,int b){写比较两个数的方法
}
public static int comNum(int c,int d,int e){
调用比较两个数的方法得到的结果再调用比较两个数的方法}
public static void main(){
写出调用函数和对应三个数的真实值
}
2:public static int
comNum(int a,int b){}
public static double comNum(double a,double b){}
求a和b的和,一个是浮点数一个是整数。
二:局部变量和成员变量的区别
局部变量
1;在方法中或者在语句块中
2局部变量必须有赋初始值
3局部变量都存储在栈中(栈特点是存储速度快,栈就是新建地址的一个空间或者是新建地址调用的方法)
4生命周期:定义的时候产生,当前的方法的括号或者语句块执行完毕就会消失(比如for循环中的int i)
成员变量
1.在类里面定义
2.可以不赋初始值
3.如果不赋初始值,用的就是默认值。比如 String 为null int 为0
4. 储存在堆中 (堆就是类的对象的属性)
5.生命周期- 会随对象的消失而消失,然后被垃圾回收器回收
三:匿名对象
new cat().name="mimi"
new cat().color=null
没有什么意义,因为在栈中没有一个变量对他做引用,很快就会被垃圾回收器回收
四:面向对象的特征:封装
将属性私有化:使用private关键字完成属性的私有化,这种属性只有本类能访问
目的:提高数据的安全性,通过封装,可以实现对属性的访问权限的控制,同时增加了程序的可维护性
如果在其他类中直接访问一个带有private
而public 封装的所有类都可以进行访问,可以对外公开的set方法来获得私有的属性值
五:this 关键字
1.打印一个对象,输出是一个对象的地址(jdk提供了一个地址)
2.this只能在类的对象中使用
3.this代表当前调用这个this所在方法的对象的自身对象地址。
4.非main方法中this.属性名==主函数中对象地址.属性名
5.this可以在方法内区分同名的类的属性和参数名,有this的一定是属性,没有this的一定是方法的参数名。
六:程序执行流程
第一步:将Java TestCar 时,把TestCar.class载入到jvm,把main放入方法区中,把main方法压栈
第二步:加载Car.class进入jvm,然后把两个方法run和introduse方法加载到方法区,
在堆中开辟一个空间创建了一Car个对象,在栈中产生了一个变量car指向堆中的对象。
第三部:在主函数的方法中给Car的属性做赋值
第四步:car的run方法近栈,把car变量所指向的地址赋值给this关键字,执行方法体
第五步:run方法出栈,run中的this消失
第六步:car变量消失,main出栈后消失
第七步:由于Car堆中的对象失去了变量后变成了匿名对象,从而失去了作用
七:构造器
1.构造器的语法
public 类名(数据类型 参数名,......)
目的:创建对象
eg:public Person(String name,int age,....){
this.name=name;
this.age=age;
}
主函数中需要创建一个对象
Person p=new Person("刘玉",12);
system.out.println(P.name);
构造器的特点:
1.方法名与类名一致
2.方法没有返回值也没有void和static
3.参数可有可无(没有的时候是默认的对应的参数)
注意:如果类中没有带参数的构造器,就可以使用一个隐秘的默认的构造器开创建对象
如果一旦又带有参数的构造器默认的构造器就会被覆盖,我们可以显示的定义出来默认的构造器就可以使用了。
创建三个相同类不同参数个数的构造器时可以用重载的方式来调用小的参数个数的构造器
eg:....Person(intage){ this.age=age; }
....Person(int age,double agb){ this(age);(第一行)this.agb=agb; }
........
八:static关键字
1.修饰在属性上
定义类属性:
static 数据类型 变量名 放在类中方法外:类属性(static int userCount)
类属性的访问:类名 . 类属性名 (推荐使用)
对象名. 类属性名(不推荐)
类属性的生命周期:
类属性伴随jvm的类属性的变化而变化
对象属性的生命周期:
当对象被创建时就产生了,而对象所在的方法被执行完毕就会被垃圾回收器回收。
2.修饰在方向上
语法:
public static返回值类型(int或者(void))方法名(数据类型 参数名)
方法体
return 结果;
static是属于类的,而不是对象的,故在类的方法中不能用this
类方法的调用:
有static时的情况 类名 . 类方法名(建议使用)
对象 . 类方法名(不建议使用)
在类方法中不能使用对象的属性,类方法只能使用类属性(使用它来做工具类,比如在做排序时使用静态变量便于调用类中的方法的属性)。
网友评论