Java面向对象设计(面向对象进阶-1)
面向对象进阶
在java中,变量分为成员变量和局部变量,成员变量是在类范围内定义的变量,局部变量是在方法中定义的变量。
成员变量的使用
成员变量在使用之前,需要先进行声明,声明成员变量是在类的内部,方法在外部定义的变量,成员变量分为实例变量和类变量。实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个范围。
成员变量的语法
[<修饰符>][static][final]<变量类型><变量名>
示例如下
public class Hero {
String name;//英雄名字
int age;//英雄年龄
public static void main(String[] args){
//创建英雄对象hero1
Hero hero1 = new Hero();
hero1.name="德鲁伊"; //为hero1的实例属性name赋值
hero1.age=45;
//创建英雄对象hero2
Hero hero2 = new Hero();
System.out.println("英雄hero1的名字:"+hero1.name
+"\t"+"年龄:"+hero1.age);
System.out.println("英雄hero2的名字:"+hero2.name
+"\t"+"年龄:"+hero2.age);
}
}
成员变量与局部变量的区别
在类中的位置不同:成员变量在类中方法外面;局部变量在方法或代码块中,或方法声明上(参数列表中)
内存位置不同:成员变量在堆中(方法区中的静态区);局部变量在栈中
生命周期不同:成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失。
初始值:成员变量有初始值
this关键字和方法调用
Java提供一个this关键字,this关键字总是指向调用该方法的对象。
最大的作用:让类中的一个方法访问该类中的另一个方法或实例成员变量
可以看代码示例:
Public class demo{
int x ;
String y;
public void get(int x , String y){
this.x = x;
this.y = y;
}
public void method(){
System.out.println(x,y);
}
}
总结:this就是对当前类对象的一个引用,可以避免类中成员变量和局部成员变量重名时的冲突问题
所以需要注意:this不能和static静态关键字一起使用,static修饰成员不属于任何对象所所有,而属于类所有
类的成员封装
封装的主要意思:
该隐藏的隐藏,该开发的开发
Java中的封装可以实现以下目的:
1.隐藏类的实现细节
2.让使用者能通过事先预定的方法访问数据
3.可以对数据进行检查提高数据的可用性
4.便于修改,提高代码的可能性
使用访问控制符
private这是Java访问修饰控制符的一种,除了private外,还有default、protected和public,Java访问控制级别从小到大
类中的静态方法和静态代码块
类包括加载和实例化两个阶段,当一个类被加载至Java中,静态成员会被初始化,被static修饰的成员即为静态成员
静态成员包括:静态代码块,静态属性和静态方法静态成员不属于某个对象,仅属于静态成员所在的类,整个项目都是公用的,仅此一份
静态方法实例如下:
public class Math {
public static int square(int num) {
return num*num;
}
public static void main(String[] args) {
int num = 6;
int result = Math.square(num);
System.out.println(num+"的平方="+result);
}
}
运行结果如下:
注意:静态方法中不能访问实例成员,因为实例成员是对象所有,而static修饰的静态成员的是归属类所有
静态代码块实例如下:
public class StaticBlock {
static {
System.out.println("第一个静态代码块");
}
static {
System.out.println("第二个静态代码块");
}
static {
System.out.println("第三个静态代码块");
}
public static void main(String[] args) {
System.out.println("main()被执行了");
}
}