引用数据类型
引用类型:具体类、抽象类、接口 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方法