首页 > 编程语言 >Java基础学习(四)

Java基础学习(四)

时间:2023-03-03 20:58:28浏览次数:27  
标签:Java 内部 基础 代理 接口 学习 方法 public 定义

目录

接口

接口定义

  • 接口中不能有实例属性
  • 接口中也不能实现方法
  • 这两个应该交给实现接口的类完成
  • 接口不是类,不能使用new来实例化一个接口
  • Java8之前接口中不能定义静态方法,可以包含常量
  • 接口中的常量属性自动设定为public static final

步骤

  • 将类声明为实现给定的接口
  • 对接口中的所有方法进行定义
  • 需要使用关键字implements来实现某个接口

在接口中所有方法都是自动的public
实现接口时,必须把方法声明为public,不然编译器会有权限访问警告

  • Java语言是一种强类型语言
  • 在调用方法时候,编译器会检查方法是否存在

接口与继承区别

  • 每个类都只能继承一个类
  • 每个类可以实现多个接口
  • 代码示例
	public class Studnet extends People implements Comparable, Cloneable{
		//代码。。。。
	
	}

静态方法

  • Java8中允许在接口中定义静态方法且可以实现,默认方法一样

解决默认方法冲突

  • 父类优先
    • 如果父类和接口中有一个方法是同名的,那么有相同参数类型的默认方法会被忽略(类优先原则)
  • 接口冲突
    • 如果一个接口提够了默认方法,另一个接口也提供了相同方法,必须覆盖这个方法来解决冲突

接口回调

  • 是一种常见的程序设计模式
  • 可以指出某个特定事件发生时应该采取的动作

克隆

  • 对于每一个类,都需要确定
    • 默认的clone方法是否满足要求
    • 是否可以在可变的子对象上调用clone开修补默认clobe的方法
      • 以上两个必须要求类
        • 实现Cloneable接口
        • 重新定义clone方法,并指定public访问修饰符
    • 是否不应该使用clone

lambda表达式

  • Java8的新特性,用来处理代码块

语法

  • 代码示例
	first.len() - second.len();
	(Integer first, Integer second) -> first.len() - second.len();
  • lambda表达式就是一个代码块
  • 也可以称为函数式接口

内部类

  • 是定义在一个类中的类
    • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据
    • 内部类可以对同一个包的其他类隐藏起来
    • 定义一个回调函数并不想写很多代码,使用匿名内部类
  • 示例代码
	public class People{
		
		//People类中的内部类
		class Student{
		
		
		}
	
	}
  • 内部类的所有静态属性都必须是final

局部类

  • 存在于方法中或者代码块中的类
  • 代码示例
	public void run(){
		
		class People{
		
		
		}
		
	}

- 局部类不能使用`public`或者`private`进行修饰
- 对外部世界完全隐藏
- 局部类只能引用定义为`final`的局部变量

匿名内部类

  • 不需要命名的局部内部类
  • 匿名内部类不能有构造器
  • 可以将构造器的参数传递给父类构造器

  • 只有内部类可以声明为static
  • 静态内部类的对象除了对生成他的外部类对象的引用特权外,和其他内部类一样
  • 在内部类不需要访问外部类对象的时候,应当使用静态内部类
  • 静态内部类可以有静态属性和方法
  • 声明在接口中的内部类,自动称为staticpublic

代理

  • 有一个表示接口的Class对象,它的确切类型在编译时无法知道
  • 使用反射机制又很慢
  • 代理机制是一种更好的解决方案
  • 代理类可以在运行时创建全新的类,能够实现指定的接口
    • 指定接口所需要的全部方法
    • Object类中的全部方法
  • 不能在运行时调用,提供了一个调用处理器

创建代理类

  • 需要使用Proxy类的newProxyInstance方法,有三个参数
    • 一个类加载器
    • 一个Class对象数组
    • 一个调用处理器

代理类的特性

  • 所有代理类都扩展于Proxy类。一个代理类只有一个实例-->调用处理器,定义在Proxy的父类中
  • 所有的代理类都覆盖了Object类中的方法toStringequalshashCode
  • 没有定义代理类的名字,虚拟机中的Proxy类将生成一个以字符串$Proxy开头的类名
  • 特定的类加载器和预设的一组接口,只能有一个代理类
  • 代理类一定是publicfinal
  • 可以调用Proxy类中的isProxyClass方法检测一个特定的Class对象是否代表一个代理类

标签:Java,内部,基础,代理,接口,学习,方法,public,定义
From: https://www.cnblogs.com/zmhomecomputer1104/p/17176925.html

相关文章

  • Java基础——IO基础知识
    字节流可以处理任何类型的数据(图片、MP3、视频等文件),字符流只能处理字符类型(文本文件)的数据。      ......
  • 进阶必备 - Java 反射由浅入深
    本博文主要记录我学习Java反射(reflect)的一点心得,在了解反射之前,你应该先了解Java中的Class类,如果你不是很了解,可以先简单了解下。一、Java反射机制参考了许多博文......
  • 代码随想录算法训练营Day31 贪心算法| 理论基础 455.分发饼干 376. 摆动序列 53. 最
    代码随想录算法训练营理论基础什么是贪心贪心的本质是选择每一阶段的局部最优,从而达到全局最优。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。贪......
  • MySQL基础
    本单元目标​ 一、为什么要学习数据库​ 二、数据库的相关概念​ DBMS、DB、SQL​ 三、数据库存储数据的特点​ 四、初始MySQL​ MySQL产品的介绍​ MySQL产品的......
  • 使用Vue3 & Vite + Laravel 前后端分离基础案例 (2后端)
    本文为后端配置。前端配置详见 ​​《使用Vue3&Vite+Laravel前后端分离基础案例(1前端》​​第一步:创建Laravel项目composercreate-projectlaravel/laravella10vu......
  • java通过url下载文件
    通过流的方式进行下载: 代码如下:/***通过url地址进行下载文件*@paramurl网页地址*@paramfileName文件名,不包含文件路径需要自己配置......
  • Java基础易忘知识点
    Java基础易忘知识点位运算符(不完整)​ 11000101​ 10101100&:与运算 10000100 按位相与|:或运算 11101101 按位相或^:异或运算 01101001 相......
  • JavaDoc
    JavaDocjavadoc是用来生成帮助文档的常用参数:使用方式:在包下加入或者函数上面输入/**+回车......
  • Http学习
    HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。端口:80Https:安全的端口:443两个时代http1.0HTTP/1.0:客户端与web服务器连接以后,只能......
  • java实现解压jar文件到某个目录/压缩某个目录为jar文件(好记性不如烂笔头)
    这里实现一个小功能,仅用于记忆功能:解压一个jar包到本地一个目录把一个目录压缩成一个jar包/***1,读取jar包,得到class文件*2,把class文件持久化到本地磁......