天天看点

什么是分类分包,static关键字的使用

作者:小謝吖

static - 分包

今日目标:

1 能够理解什么是分类分包

2 能够掌握static关键字的使用

3 能够使用分包写出学生管理系统

一 :案例驱动教学

通过所学知识实现一个demo, 然后用新学的知识去逐步的完善demo 完善方向: 1 冗余代码 2 业务逻辑性(可读性) 3 可维护性

思考:回想下面向对象思想:我们应该把任何功能都当成对象,那一个对象应该有什么样的表现形式呢? 在一个系统中对象应该是?

1各司其职 ---->对象应该保持简单性 越是大的公司 里边的对象职责划分越清楚 职责越简单对于小公司来说 一 个人可能干许多活。
---->越是复杂的系统 其组成的对象越是简单的。

2弱耦合性 ---->对象和对象之间的联系应该尽量弱化:电脑中里边有个硬盘 你是希望插在主 板上还是焊在主板上?当然是插在上边比较好 容易去更换
---->如果是焊在主板上 主板焊主机上 主机和显示器在一起,那硬盘坏了整个都得更换。
当然也符合各司其职的优势
---->当我们存储空间不够用的时候 可以更换一块大的 插拔的设置使得更换很灵活,
且硬盘和电脑联系比较弱。
---->总之我们在系统软件的时候 组成的对象和对象之间联系要弱一些。

3可重用性 ---->尽可能的避免重复性的劳动,写好之后反复使用
重用的前提是各司其职只干一件事 和其他对象是弱耦合的。

4可扩展性 ---->在可重用的基础上 例如 a对象有1,2两个功能(也就是两个方法) 现在我 需要一个对象它需要具备 1,2,3 三个功能
---->我可以创建b对象在a对象的基础上去扩展出第三个功能 重用a对象的1 2功能 (增量开发)           

二 :分类思想

1.1 问题提问

1 什么是分类思想

2 黑马信息管理系统如何分类           

1.2 视频时长

11分15秒           

1.3 问题答案

1 什么是分类思想
1 拆分成各个对象: 各司其职, 一个人只干一件事情,一个对象只负责事情 .
2 对象之间相互配合完成复杂的工作. 比如咱们班级讲师对象负责授课,班主任这个对象负责班级管理,两个对象相 互配合

2 黑马信息管理系统如何分类
Student类 标准类 封装具体的学生数据
StudentDao类 Dao用于访问存储数据的数组或者集合(将来这个是和数据库直接打交道的)
StudentService类 业务逻辑处理 做一些个服务逻辑的判断等
StudentController类 主要是和用户打交道,(接受用户的数据,请求分发,返回数据给用户看)           

1.4 问题补充

***画图分析:
IE 服务器(Controller service dao) 数据库           

三 :分包思想:包的概述和定义

1.1 问题提问

1 什么是分包思想

2 什么是java中的包

3 怎么分包           

1.2 视频时长

6分17秒           

1.3 问题答案

1 什么是分包思想
java程序是以类为单位组成的
比如咱们用java做个计算器,扫雷 可能写四五个类就足够了,但是大型的应用,如经常
用的jd商城,天猫商城 这些个网站功能很复杂 用java写个千儿八百的类应该是有的,
那么这么多类我们应该通过一个有效的方式把他们组织起来,这么多类编译完毕之后对应很多个.class文件。要是有 几百几千个文件 你会用什么方式把这些类管理起来。--->目录

当你电脑的文件多了的时候我们自然会按照文件的功能
文件的类型去分门别类的放到很多的目录中,目录中还能有子目录
类似当我们项目中类变多的时候我们也会用包的概念把他们组织起来
包的概念和文件系统中目录的概念是可以划等号的 一个包就对应着一个目录
目录中有子目录 那么包中可以有子包。
那么我们在写类的时候写代码的时候就应该描述一下 这个类是属于哪一个包的
"所以包的本质就是文件夹"

2 什么是java中的包
java描述包用一个关键字 package

package 包名; //用这个语句来告诉别人这个文件中的类属于哪一个包
特点;必须是整个文件的第一句话 当我们描述了一个类属于某个包的时候 就应该用目录的概念把他们管理起来
package p1;

public class Demo{
public static void main(String args []){
System.out.println("Hello World");
}
}
实际开发:
在实际的企业开发当中 任何一个类都会放在对应的包中
所以实际上一般的java代码永远都是 package打头不写也是可以
那么编译之后的.class文件是放在当前目录下的
但这不是一个好的习惯 它是和企业开发习惯相违背的 当一个类有了包之后 在使用这个类的时候 定是要
包名.类名 这种写法叫 [全限定名]/[全类名]

根据以上的说法又引出一个问题:当我们用到类的时候都得写全限定名非常麻烦。
假如:创建了一个A类 在A类中不可避免的会用到其他类,(java中代码是以类为单位的 类和类之间也不是相互独立的)也许你写了个B类需要在A类中使用 在使用的时候A类中就要出现B类的名字 就得写B的全限定名

3 怎么分包
原则: 不同功能的类,放在不同的包中
相同功能的类,放在相同的包中
那具体怎么做呢
1 软件要各司其职,原有的系统职责要划分很清楚,当某个模块要扩展的时候很容易找到
2 弱耦合性: ABC三个模块,我扩展一个D模块替换C模块,然后对AB模块没有影响
3 重用性
4 可扩展

他们对应的就是
1 封装对象
2 接口 多态
3 封装方法或者工具类
4 继承实现扩展           

四 :包的注意事项和类的的访问

1.1 问题提问

1 package 包的注意事项

2 类与类之间如何访问

3 import关键字的使用要注意什么           

1.2 视频时长

10分55秒           

1.3 问题答案

1 包的注意事项
package 关键字的使用
1 为了更好的实现项目中类的管理,提供包的概念
2 使用package声明类或者接口所属的包 声明在源文件的首行(可执行代码的第一行)
(只的是包声明上边没有其他代码并不一定是在第一行)
3 包 属于标识符,遵循标识符的命名规则,同时应该遵守规范,做到"见名知意",全小写
(查看api中的每个类所属的包)
4 每"."一次 就代表了一层文件目录
5 在一个java文件当中只有一个package,如果没有package默认表示无包名

注意: 同一个包下不能够命名同名的接口,类.
不同的包是可以的.
和系统文件目录相关(同一个文件中不能定义同名--不区分大小写的同名的文件)

2 类与类之间如何访问
package p1 package p1 package p2
A类 B类 C类

在A类中用C类:不能直接写 导包写import p2.* 或者是p2.C
在A类中用B类:直接用 在同一个包里边
不同包的类如果使用需要导包
同一个包中的相互使用不同导包

多个包下,出现了相同的类名称,就可以使用写全类名的方式进行区分,

3 import关键字的使用要注意什么
1 在源文件中显示的使用import结构导入指定包下类,接口
2 位置: 声明在包的声明和类的声明之间 多个导包并列即可
3 如果导入的是同一个包下的类 可以使用"xxx.*"的方式
表示导入该包下的所有直接类,(xxx子包下的仍需再在导包)
* 通配符
4 java.lang 核心包默认导入 所以该包下的类直接使用
5 如果使用的是当前包下的类,则不用导包直接使用
6 如果要导入是多个不同包,但是是同一个类名的类
需要使用全限定名(全类名 包名+类名)去区分

最初的写法都是全类名 但是都写全类名或者是相同包下的类 看起来比较的麻烦所以把重复的
包名抽取出来出现了import导包,注意导包的落脚点是一个包(文件)

但是这些个注意点不需要刻意关注,使用集成工具,如果需要导包都会提示你,导包,如果是同名的类提示你导哪个包           

1.4 问题补充

public class Demo{
public static void main(String args []){
Date d;
//这个类是我们安装jdk的时候那套类库中自带的类 sun公司写的 这样直接写是不行的 编译器看到这句话
//它知道你要用哪个Date类吗 有没有可能有好多包中有好多类都叫Date
//所以你在用的别的类的时候一定要写全限定名
java.util.Date d2;
System.out.println("Hello World");
}
}
java.utl.Date;如果用到好多类都这样写(全限定名)会不会就成为了程序员的一种负担。

给大家看一段代码
package p1;
public class Demo{
public static void main(String args []){
Date d=new Date(); //java.util.Date
List ls=new ArrayList(); //java.util.List //java.util.ArrayList
File f=new File(""); //java.io.File
System.out.println("Hello World");
}
}
上边这些类你在用到的时候都得写包名

怎么解决这个问题:java给我们提供了一个语法叫包的引入 import
格式:import 全限定名


import java.util.Date; //这句话的意思就是在这个类中如果用到Date这个类 都指 //的是java.util.Date类 相当于声明
import java.util.List;
import java.util.ArrayList;
package p1;
public class Demo{
public static void main(String args []){
Date d=new Date();
List ls=new ArrayList();
File f=new File("");
System.out.println("Hello World");
}
}

import java.util.Date;
import java.util.List;
import java.util.ArrayList;

或者把这三句话写成 import java.util.*; //* 是个通配符 表示这个包中的所有类,不包括子包、
错误写法: java.*.* //人可以懒 但是不能懒成这个样子

不写import行不行是可以的 那就手勤快点 每次都写类的全限定名
其实在我们最开始学的hello world中也有用到其他类

public class Demo{
public static void main(String args []){
System.out.println("Hello World");
}
}
String System其实都是类 用的时候前边没有带包名 类上没有写import
这两个类属于同一个包
java.lang 包所以 java.lang.String,java.lang.System
这个包是java的语言包是任何一个程序都离不开的最基础的一个包所以系统会默认的为每一个程序加上imoprt java.lang.*
只有这个包是自动引入的
***
总结: import 的作用是 避免重复的写包名,让我们的代码更加的简洁,少些一些啰嗦的东西,增加开发速度 当然你还要明白一个概念,不是一定要非写import,也可以每个类都去写全限定名。
***
总结: 一个java程序的最基本的程序结构是什么样的 按照顺序
package 0-1 0或者一个
import 默认1个-N 0或者多个
class 1-N 1或者多个 公开类只能有一个           

五 :需求分析

什么是分类分包,static关键字的使用