引用类型:具体类、抽象类、接口 1)具体类: 形式参数:如果形式参数是一个具体的类,那么需要创建该类对象 返回值:方法的返回值是一个具体的类,创建该类对象 2)抽象类: 形式参数:需要再定义一个抽象类的子类,来进行实例化(即创建对象) 返回值:返回值如果是抽象类,需要返回的是该抽象类的子类对象 3)接口 形式参数:如果形式参数是接口的情况,那么需要自定义一个接口的子实现类,然后通过接口多态的形式给接口实例化 返回值:返回值如果是接口类型,需要返回的是该接口子实现类对象(通过子实现类进行实例化) 4)数组 实际参数需要传递数组对象内部类
在一个类中定义另一个类,称为内部类。
1)成员内部类---在外部类的成员位置定义的类
2)局部内部类---在外部类的成员方法中定义的类
在类A中定义一个类B,那么类B是类A的内部类,类A就是类B的外部类。
内部类是直接可以访问外部类的成员,包括私有。外部类要访问内部类的成员,必须通过创建内部类的对象访问该内部类的成员。
外部类访问内部类
1)
2)如何直接访问成员内部类
class 类名 {
public int 成员变量;
class 内部类{
public void show(){
System.out.println(可以访问外部类的成员(包括私有));
}
}
}
public ckass 测试类{
public static void main(String[] args){
外部类名.内部类名 对象名 = new 外部类对象. new 内部类对象
}
}
成员内部类可以使用private修饰,可以保证数据的安全性
成员内部类还可以加入static修饰的,特点:
如果成员内部类都是静态的--成员内部类的这个方法是否静态,无关了
访问外部类成员---->只能是静态的
非静态的成员内部类中,不能存在静态方法
因为静态方法先进方法区
权限修饰 在同包下的 同包下的子类中 不同包下子类中 不同包下的无关类中 当前类中 /无关类中 private √ 默认修饰符 √ √ protected:受保护的 √ √ √ public :最大的 √ √ √ √ 其他的修饰符: static:结合自定义去使用 定义自定义常量结合final public static final 数据类型 变量名 = 初始化数据; static还可以在工具类中---->工具类中的构造方法私有化,里面的方法都加入static,类名访问 abstract--->修饰类-->抽象类 还可以在成员方法中定义:抽象类中 =--->public abstract 返回值类型 方法名(参数列表) ; abstract在接口中定义的抽象方法---abstract可以省略 final结合static一块使用的: public static final 数据类型 变量名 = 初始化数据;package在开发中的包的真实含义
包:---就是文件夹(目录)
真实的开发环境中包是需要针对代码分层的
我们在开发项目的时候,不可能将所有的java文件都放在一个包下!
项目中可能有10000多个java文件---->全都放在一个包(目录下)---不规范化---->后期管理维护很麻烦!
怎么办呢?
一般都是多级包--->com.qf.xx ---->公司域名的反写-->带上部门的名称
cn.hsbc(hsbc:汇丰银行)
代码分包:
实体类
com.qf.pojo/entity/domain----> 存储的实体类(描述现实世界事物的)
这个类---->符合"JavaBean规范"
这个类是具体类 class XXX{}
//属性私有化
//对外提供公共的访问方法setXXX()/getXXX()
//实现序列化接口--->serializable接口
(以后在分布式项目中)
当前这些类---需要在网络中传输的("流数据")
class User{
//属性私有化
//setXXX()getXXX()
}
service层(服务层)
业务接口层
包名:
com.qf.service
举例: UserService
//用户注册功能
boolean register(User user) ;
boolean login(User user) ;
com.qf.service.impl
业务接口的实现
UserServiceImpl
实现上面的这些功能!
数据--->从哪里来--->从数据库中访问
在业务实现层中调用数据库访问层中的接口方法
dao:data access Object:数据访问对象
持久层(数据库访问层)
包名
com.qf.dao
数据访问的接口层
UserDao接口
//查询数据库中是否有User信息
boolean sleectUser(User user) ;
com.dao.impl
数据访问接口实现层
UserDaoImpl实现层 boolean sleectUser(User user) {
//jdbc--->java 连接数据库的操作获取数据
}
控制层 controller层
包名
com.qf.controller
类名:UserController
代码--->调用业务层数据方法
就有业务数据--->利用前后端的交互技术进行数据的视图的渲染!
常用的重点类
Object:任意类的父类(jdk提供/自定义的类)
所有类默认继承于Object类 可以不写
常用:
public final Class getClass() :获取当前正在运行的Class类对象(字节码文件对象) public int hashCode():理解 "一个地址值",不是实际意义的地址值 它是经过底层的哈希算法(hash)算出来的(目的是区别方法的一致性)
public String toString() 返回对象的字符串表示形式 自动生成
alt+ins---->toString()
public boolean equals(Object obj):比较对象是否相等
引用该类型比较的是地址值是否相同
"=="和equals的区别
==:如果连接都是两个基本数据类型:比如int 比较的是数据值是否相等
如果连接的是引用类型,那么比较的是地址值是否相同
equals()是Object类的方法
源码
public boolean equals(Object obj) {
return (this == obj);
}
如果我们不重写Object的equals方法,
默认比较的是两个引用类型的地址值是否相同,
如果重写了equals方法而且同时重写了hashCode()比较的是成员信息是否相同!
所以几乎所有类都会覆盖!
论何时覆盖该方法equals(),通常需要覆盖hashCode方法



