封装
-
1、什么是封装?有什么用?
作用:1.保证内部结构的安全
2.屏蔽复杂,暴露简单
-
代码级别上,封装有什么作用?
一个类体中的数据,封装之后,无需关心代码的复杂实现,只需要一个简单的入口就可以访问了。类体中安全级别较高的数据,就不容易被误操作修改。
class PersonTest{ private int age;//private 表示私有的,被他修饰的关键字只能在本类中访 问。出了这个类,age属性就不能被访问了。 } public class Test{ public static void main(String[] args){ Person p = new Person(); } }
-
外界要是想访问,得调用两个方法,读(get)和改(set)。
-
注意:
方法在调用时参数传递和类型无关,都是将变量中保存的那个“值”复制一份传过去,那个值可能是一个数字也可能是一个地址。
-
-
2、实例方法
-
实例方法:对象级别的方法(又叫 实例方法)
- 实例相关的变量叫实例变量(实例属性)
- 实例相关的都要先new 对象,通过引用“.”的方式去访问。
例如: public void doSome(){ }
注意:空指针异常(Nullpointerexception)出现的原因是空引用访问实例相关的数据。
实例相关包括:成员对象+实例方法。
-
-
3、封装步骤
-
1.属性私有化
-
2.一个属性对外提供公开的get和set方法作为操作入口,并且都不带static,都是实例方法。通过get方法获取,set方法修改,可以在set方法中设立关卡保证属性的合法。
class Person{ private String name; public int getNmae(){ rerurn name; } public void setName(int xingming){ name = xingming; } } public class Test{ public static void main(String[] args){ Person p = new Person(); p.getName(); p.setName("sefg123"); } }
-
get方法格式:
【修饰符】 返回值类型 get+属性名首字母大写(){
返回值;
}
-
set方法格式
【修饰符】void set+属性名首字母大写(参数类型 参数名 ){
实例变量 = 参数名;
}
-
static
-
static
1.静态
- 所有static关键字修饰的都是类相关的,类级别的
- 所有static 修饰的都是采用 类名. 的方式去访问。
- static 修饰的变量:静态变量
- static 修饰的方法:静态方法
2.分类
-
成员变量又分为
- 实例变量
- 静态变量
class VarTest{ int a; //实例变量 static int k; //静态变量 public void q(){ } //实例方法 public static void w(){ } //静态方法 }
注意:静态的都是类相关的。
-
2.什么时候声明实例变量,什么时候声明为静态变量?
答:如果这个类型的对象的某个属性都是一样的,定义为静态的。
一个对象一份,实例变量。所有对象一份,静态变量。
-
1.只要是方法,无论是静态方法,实例方法,构造方法都会压栈。
重点注意:加static 的变量叫做静态变量,静态变量在类加载时初始化,不需要 new 对象,静态变量的空间就开辟出来了。静态变量存储于方法区当中。
局部变量:栈中
实例变量:堆中
静态变量:方法区中
-
2.实例的:“引用.” 访问
-
静态的:“类名.”访问,也可以“引用.”访问,建议使用 类名.访问
class Chinese{ Strind idCard; String name; static String country = "中国"; public Chinese(String a;String b){ idCard = a name = b; } } public class Test{ public static void main(String[] args){ Chinese c = new Chinese("qw12","张三"); System.out.println(c.idCard); System.out.println(c.name); System.out.println(Chinese.country); /* 或者System.out.println(c.country); */ } }
注意:空指针异常是指空引用访问实例相关数据。而空引用访问静态变量不会发生空引用异常。静态变量存储在方法区中,类加载时初始化。
-
-
静态代码块
-
1、语法:
static{
java语句1;
java语句2;
}
- static 静态代码块在类加载时执行,并且只执行一次。
- 注意:静态代码块在类加载时执行,并且在main之前执行。
-
2、作用:
- sun 公司为java程序员提供一个特殊的时机(类加载时机),可以用来记录日志
public class Test1{
static{
System.out.println("A");
}
static{
System.out.println("b");
}
public static void main(String[] args){
System.out.println("你好");
}
static{
System.out.println("c");
}
}
方法
-
1、方法什么时候定义为静态方法,什么时候定义为实例方法呢?
答:方法都是描述了一个行为,如果该行为必须由对象触发就是实例方法。
参考标准:
当这个方法体中,直接访问了实例变量,这个方法一定是实例方法。
-
实例代码块
-
除了静态代码块,还有实例语句块。
-
语法:
{
java 语句;
java语句;
}
只要构造方法执行,必然在构造方法执行之前,自动执行实例语句块中的代码。其实也是sun公司为程序员提供的一个特殊时机,叫对象构建时机。
-