一. 面向对象的封装性
1. 封装的好处:
1、封装之后,对于那个事物来说,看不到这个事物比较复杂的一面,只能看到该事物简单的一面。复杂性封装,对外提供简单的操作入口。照相机就是一个很好的案例,照相机的实现原理比较复杂,但是对于使用照相机的人来说,操作起来是非常方便的。还有像电视机也是封装的,电视机内存实现非常复杂,但是对于使用者来说不需要关心内部的实现原理,只需要会操作遥控器即可。
2、封装之后会形成真正的“对象”,真正的“独立体”。
3、封装就意味着以后的程序可以重复使用。并且这个事物应该适应性比较强,在任何场合都可以使用。【可重用性】
4、封装之后,对于事物本身,提高了安全性【安全级别高】
2. 封装的步骤:
1、所有属性私有化,使用 private 关键字进行修饰,private 表示私有的,修饰的所有数据只能在本类中访问
2、对外提供简单的操作入口,也就是说外部程序要想访问 age 属性,必须通过这些简单的入口进行访问:
- 对外提供两个公开的方法,分别是 set 方法和 get 方法
- 想修改 age 属性,调用 set 方法
- 想读取 age 属性,调用 get 方法
3、set 方法的命名规范:public void set + 属性名首字母大写(形参){ };
public void setAge(int a){
age = a;
}
4、get方法的命名规范:public 返回值类型 get + 属性名首字母大写(形参){ };
public int getAge(){
return age;
}
5、需要背会的:
- setter和getter方法没有static关键字
- 有static关键字修饰方法怎么调用?
类名.方法名(实参); - 没有static关键字修饰方法怎么调用?
引用.方法名(实参);
例:
public class UserTest
{
public static void main(String[] args){
User user =new User();
//编译报错,age属性私有化,在外部程序中不能直接访问
//从此之后age属性非常的安全,但是有点太安全了。
//对于目前程序来说,age属性彻底在外部访问不到了。
//System.out.println(user.age);
//修改
user.setAge(-100);//对不起,您提供的年龄不合法
//读取
System.out.println(user.getAge());//0
}
}
public class User
{
//属性私有化
private int age;
}
public void setAge(int a){
//编写业务逻辑代码进行安全控制
//age = a;
if(a<0||a>150){
System.out.println("对不起,您提供的年龄不合法");
return;
}
//程序可以进行到这里的话,说明a是合法的,则进行赋值运算
age = a;
}
public int getAge(){
return age;
}
二. 包和import
1. 关于 java 语言当中的包机制:
1、包又称为 package, java 中引入 package 这种语法机制主要是为了方便程序的管理。
不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。2、怎么定义 package 呢?
在 java 源程序的第一行上编写 package 语句。
Package 只能编写一个语句.
语法结构:
Package 包名;3、包名的命名规范:
公司域名倒序+项目名+模块名+功能名;
采用这种方式重名的几率较低。因为公司域名具有全球唯一性。
例如:
Com. Bjpowernode . Oa. User . Service;
Org . Apache. Tomcat. Core ;4、包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则
5、一个包对应的是一个目录
6、使用了 package 机制之后,应该怎样编译?怎么运行呢?
使用 package 机制后,类名不在是 Test ,而是包名. 类名
package com.bjpowernode;
public class Test1()
{
public static void main(String[] args){
//创建Test对象
//以下代码编译错误:当省略包名之后,会在当前包下找Test
//实际上编译器去找:com.bjpowernode.Test了,这个类不存在。
//Test tt = new Test();
//System.out.println(tt);
//修改以上错误
//包名不要省略
//结论:什么时候前边的包名可以省略呢? Test和Test1在同一个包下的时候不需要加包名。
com.bjpowernode.javase.day.Test tt = new com.bjpowernode.javase.day.Test();
}
}
2. import
1、import 语句用来完成导入其他类,同一个包下的类不需要导入,不在同一个包下需要手动导入。
2、import语法格式:import 类名;import 包名.* ;
package com.bjpowernode;
import com.bjpowernode.javase.day.Test; //导入包
public class Test2()
{
public static void main(String[] args){
Test x = new Test();
System.out.println(x);//com.bjpowernode.javase.day.Test
}
}
3、*_java.lang._不需要手动引入,系统自动引入
lang:language语言包,是java语言的核心类,不需要手动引入。
String s ="abc";
System.out.println(s);
//Date d = new Date();//编译错误,因为没有Date类
需要 import java.util.Date;
4、什么时候需要 import?
- 不是 java. Lang 包下,并且不在同一个包下的时候,需要使用 import 进行引入
三. 访问控制权限
访问控制权限修饰符 :
1、访问控制权限修饰符来控制元素的访问范围
2、访问控制权限修饰符包括:
- Public: 表示公开的,在任何位置都可以访问
- Protected: 同包,子类
- 缺省 default(系统默认状态): 同包
- Private: 表示私有的,只能在本类中访问
3、访问控制权限修饰符可以修饰类、变量、方法…
4、当某个数据只希望子类使用,使用 protected 进行修饰
5、修饰符的范围: Private < 缺省 < protected < public
6、类只能采用 public 和缺省的修饰符进行修饰【内部类除外】






