一、封装
1、为什么要使用封装
(1)案例中的代码有缺陷
a、属性随意访问。
b、不合理的赋值。 Penguin p =new Penguin( );
p.health = -1000;
2、什么是封装
封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法拉埃实现对隐藏信息的操作和访问。
封装的两大原则:a、把尽可能多的东西隐藏起来,对外提供便捷的接口
b、把所有的属性隐藏起来
3、如何实现封装
a、修改属性的可见性(设为private,防止错误的修改)
b、创建公有的getter/setter方法(用于属性的读写)
c、在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
例: private String name;
public Vote(String name) {
this.name=name;
}
public String getName() {
return name;
}
4、封装的好处
a、便于使用者正确使用系统,防止错误属性修改
b、有助于系统纸浆的松耦合,提高系统的独立性
c、提高软件的可重用性
d、降低了构建大型系统的风险
二、包
1、为什么需要包
a、文档分门别类,易于查找和管理
b、使用目录解决文件同名的冲突问题
2、创建包
a、包名由小写字母组成,不能以圆点开头或结尾
package mypackage;
b、包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
package net.javagroup.mypackage;
c、包名后续部分根据机构内部规范填写
package net.javagroup.research.powerproject;
3、导入包
a、package 一个类里面只能有一个package,且是在类的第一句。在不同包下可以存在相同名字的类(与电脑的一致)。
b、包的命名一般都是已网站倒序来命名的如:以com/cn的开头+部门名+项目名+这个包的作用。包名都是由小写字母组成的!
c、导入包由import+包名。建议用哪个数据就导入哪个,不要直接一下子导全部(*)。
四、成员变量和局部变量
1、两者的作用域不同:
局部变量只能在定义它的方法中被使用,出了方法就不能被使用;
(全局)成员变量是创建在类中但又在方法之外的变量,它的作用范围是整个类;
2、初始值不同:
java会自动给成员变量(全局变量)赋一个初始值;
并不会给局部变量赋初始值;
3,使用注意规范:
局部变量规范:
a、在同一个方法中不能同时存在同名的局部变量;不同的方法可以存在同名局部变量;
b、在同一个方法中,局部变量的优先级更高;
4、存放空间不同:
之所以它们的作用范围不同是因为它们分配到的内存空间不一样
a、我们创建的成员变量是被java虚拟机分配到堆中的,所以成员变量用完并不会立刻被销毁
b、同样局部变量是被分配到栈中的;局部变量出了命名范围就等于被销毁了,不能再使用。
关于栈和堆:
以前我们学二维数组的时候也说过,我们的外围数组是放在堆中的,
这个数组中的成员数组是放在栈中的。
堆 栈 静态空间
成员变量 局部变量 静态变量
二维数组的主数组 成员数组
在一个方法中不允许有同名局部变量
但在一个类的不同方法中允许存在相同名字的变量
在一个类中成员变量和局部变量同名时,局部变量拥有更高的优先级
成员变量系统会默认给它初始值
可以在其他类中创建该类的对象并使用成员变量
成员变量在整个类中都是可以使用的
局部变量使用时一定要给他一个初始值
局部变量的作用域仅限于定义的方法内
被static修饰的方法称为 静态 方法;
被static修饰的代码块被称为静态代码块;当java虚拟机加载类时,就不执行该代码块;
特点:
a、可通过类名直接访问
c、在实例方法内不允许创建 静态变量;
类的成员变量可分为:
实例变量:没有被static修饰的
备注:什么叫实例;例如我们定义一个 int a ;其中a就叫做这个类的实例;
静态变量:被static修饰的变量;
特点(实例变量):
(1)在内存中有多个拷贝,互不影响;
(2)不能被静态方法访问
特点(静态变量):
(1)在内存中只有一个拷贝,不论作何修改都会改变它这唯一的变量;
(2)可以在实例方法和静态方法中直接被访问;在其它类中可以通过类名来访问;
注:如果类的实例都包含有一个相同的常量属性,
我们就可以将这个属性定义为静态常量属性,
从而节省空间使用;
所以,除了final这些不变的常量,
最好不要用过多的static,不然容易出bug;
特点(静态方法):
(1)静态方法中不能使用this和spuer
(2)不可以直接访问所属类的实例变量和实例方法
(3)可以直接访问类中的静态变量和静态方法
(4)必须被实现
特点(实例方法):
(1)可直接访问所属类的实例变量和实例方法、静态变量、静态方法
解释:
被static修饰的变量在内存中就只有一个备份,所以不论任何操作都会改变这个变量的值;
static变量
类成员变量包括
类变量(静态变量)
a、被static修饰的变量
b、在内存中只有一个拷贝
c、类内部,可以在任何方法内直接访问静态变量
d、在其它类中可以通过类名直接访问,不需要创建对象
实例变量
a、没有被static修饰的变量
b、每创建 一次变量就会为实例变量分配一次内存;实例变量可以在内存中有多个拷贝,互不影响
被static修饰的变量和方法在其他类中调用时不用创建对象直接可以用类名.方法和变量就可以实现
static final;实例常量
静态方法:可以直接通过类名访问
a、静态方法中不可以使用this和super
b、不能直接访问所属类的实例变量和实例方法
c、可以直接访问静态变量和静态方法
实例方法:通过实例访问
a、可以直接访问所属类的静态变量,静态方法,实例变量和实例方法
静态方法必须被实现
main就是最常用的实例方法