面向对象(二)
封装
为了避免逻辑错误,建议对所有属性进行封装。并为其提供set和get方法进行设置和取得的操作。
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person();
p.name = "张三";
p.setAge(100);//调用setAge
p.say();
System.out.println(p.getAge());//getAge一般用于计算
}
}
class Person {
//对age属性进行封装,只能在这里调用
String name;
private int age;//使用private对属性封装
//设置一个方法,设置年龄
void setAge(int age2){
if(age2>100 || age2<0) {
System.out.println("错误");
}else {
age = age2;
}
}
//获取年龄
int getAge() {
return age;
}
void say(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
this关键字
在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
· 调用类中的属性
· 调用类中的方法或构造方法
· 表示当前对象
可以修改上面的一部分代码:
class Person {
//对age属性进行封装,只能在这里调用
String name;
private int age;
//设置一个方法,设置年龄
void setAge(int age){
if(age>100 || age<0) {
System.out.println("错误");
}else {
this.age = age;//这里可以用this,优点是简明
}
}
也可以用于无参方法
Person(){
this(10);//调用上面的方法
}
在一个构造方法中,调用另一个构造方法时,调用的代码,必须编写在构造方法的第一行。
静态static
static表示“静态”的意思,可以用来修饰成员变量和成员方法
static的主要作用在于创建独立于具体对象的域变量或者方法
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访
问。
并且不会因为对象的多次创建 而在内存中建立多份数据
-
静态成员 在类加载时加载并初始化。
-
无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
-
在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
public class Demo1 {
public static void main(String[] args) {
Person.ragion="北京";
Person p1 = new Person("张一");
Person p2 = new Person("张二");
Person p3 = new Person("张三");
Person p4 = new Person("张四");
p1.say();
p2.say();
p3.say();
p4.say();
//批量更改地区之后
Person.ragion="南京";
p1.say();
p2.say();
p3.say();
p4.say();
}
}
class Person {
private String name;
static String ragion;//创建静态属性
Person(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void say() {
System.out.println("姓名:"+name+" 地区:"+ragion);
}
}
代码块
普通代码块
在执行的流程中 出现的 代码块, 我们称其为普通代码块。
构造代码块
在类中的成员代码块, 我们称其为构造代码块, 在每次对象创建时执行, 执行在构造方法之前。
静态代码块
在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时执行。 每次程序启动到关闭 ,只会
执行一次的代码块。
面试题:
构造方法 与 构造代码块 以及 静态代码块的执行顺序:
静态代码块 --> 构造代码块 --> 构造方法
{
}
作用域
作用域 | 当前类 | 同包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
①类的成员变量的作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。
②被static修饰的成员变量称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例所共享,只要一个类被加载,JVM就会给类的静态变量分配存储空间,可以通过类名和变量名来访问静态变量。
③局部变量的作用域与可见性为它所在的花括号内。