Java基础(代码块,内部类,函数式编程,常用API,GUI编程)

news/2025/11/23 21:58:40/文章来源:https://www.cnblogs.com/yuyuyu313/p/19261652

Java基础(代码块,内部类,函数式编程,常用API,GUI编程)

代码块

  • 静态代码块:
    • static
    • 类加载时自动执行,由于类只会执行一次,所有静态代码块也只会执行一次
    • 完成类的静态资源初始化
    • 比main方法先加载。
  • 实例代码块:
    • 每次创建对象时,执行实例代码块,并在构造器前执行
    • 和构造器一样,都是用来完成对象的初始化

内部类(一个类定义在另一个类的内部)

  • 成员内部类(外部类对象持有)

    • 格式:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();

      public class Outer{

      ​ public class Inner{

      ​ }

      }

    • 创建对象:Outer.Inner oi = new Outer( ).new Inner( );

    • 成员内部类可以直接访问外部类的静态成员和实例成员

    • 成员内部类的实例方法中可以直接拿到外部类的对象,外部类名称.this。

      Outer{ a=100;Inner{a=80;public void show(){a=200;System.out.println(a);//200System.out.println(this.a);//80System.out.println(Outer.this.a);//100}} }
  • 静态内部类(外部类本身持有)

    • public class Outer{

      ​ public static class Inner{

      ​ }

      }

    • 创建对象:Outer.Inner oi = new Outer. Inner( );

    • 可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。

  • 局部内部类

    • 定义在,方法,代码块,构造器等执行体中
  • 匿名内部类(重点)

    • 匿名内部类实际是有名字的:外部类名$编号.class

    • 匿名内部类本质是一个子类,同时会立即构建一个子类对象

      class Test {public static void main(String[] args) {//这是一个匿名内部类(其实际名字为Test$1)Animal a=new Animal(){@Overridepublic void cry(){System.out.println("喵喵喵");}}a.cry();}
      }
      abstract class Animal{public abstract void cry();
      }
      
    • 开发中不是我们主动写匿名内部类,而是用别人功能的时候,别人让我们写一个匿名内部类,我们才会写。

    • 可以简化代码,简化规则为:

      • 参数类型可以全部省略不写
      • 如果只有一个参数,参数类型省略的同时,“()”也可以省略,但多个参数不能省略“()”。
      • 如果Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号“ ;”,如果是return 语句,也必须去掉return。

函数式编程(使用Lambda替代某些匿名内部类,使程序代码更简洁)

  • Lambda

    • (x)->2x+1。

    • 替代某些内部类,使程序更简洁。

    • Lambda并不是可以简化全部的匿名内部类,Lambda只能简化函数式接口的匿名内部类。其中函数式接口指的是有且只有一个抽象方法的接口。(来源于接口,只有一个抽象方法)

      class Test {public static void main(String[] args) {Animal a=()->System.out.println("喵喵喵");a.cry();}
      }
      //定义函数式接口
      @FunctionalInterface//声明函数式接口的注解
      interface Animal{void cry();
      }

举一个学生例

import java.util.Arrays;
import java.util.Comparator;public class test {public static void main(String[] args) {Student[] student=new Student[3];student[0]=new Student("qq",12);student[1]=new Student("ww",55);student[2]=new Student("ff",34);//对学生年龄进行升序排序Arrays.sort(student,new Comparator<Student>(){@Overridepublic int compare(Student o1,Student o2){return o1.getAge()-o2.getAge();}});//是上面代码的简化Arrays.sort(student, (o1,o2)->o1.getAge()-o2.getAge() );}
}
  • 方法引用
    • 简化Lambda
    • 静态方法引用:如果某个Lambda表达式里只是调用一个静态方法,并且“->”前后参数形式一致,就可以使用静态方法引用。
import java.util.Arrays;
import java.util.Comparator;public class test {public static void main(String[] args) {Student[] student=new Student[3];student[0]=new Student("qq",12);student[1]=new Student("ww",55);student[2]=new Student("ff",34);   //对学生年龄进行升序排序Arrays.sort(student,new Comparator<Student>(){@Overridepublic int compare(Student o1,Student o2){return o1.getAge()-o2.getAge();}});//是上面代码的简化Arrays.sort(student, (o1,o2)->o1.getAge()-o2.getAge() );//这是使用静态方法引用后的最简形式(Lambda表达式中只调用这一个静态方法)//类名 :: 静态方法名Arrays.sort(student, Student::Compare);}
}//学生类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private String name;private int age;//一个静态方法public static int Compare(Student o1, Student o2) {return o1.getAge()- o2.getAge();}}
  • 实例方法引用
    • 如果某个Lambda表达式里只是通过对象名称调用一个实例方法,并且“->”前后参数形式一致,就可以使用实例方法引用。
import java.util.Arrays;
import java.util.Comparator;public class test {public static void main(String[] args) {Student[] student=new Student[3];student[0]=new Student("qq",12);student[1]=new Student("ww",55);student[2]=new Student("ff",34);   //对学生年龄进行升序排序Arrays.sort(student,new Comparator<Student>(){@Overridepublic int compare(Student o1,Student o2){return o1.getAge()-o2.getAge();}});//是上面代码的简化Arrays.sort(student, (o1,o2)->o1.getAge()-o2.getAge() );//这是使用静态方法引用后的最简形式(Lambda表达式中只调用这一个静态方法)//类名 :: 静态方法名Arrays.sort(student, Student::Compare);//生成Student学生对象,用对象来调用实例方法Student s=new Student();//对象名::实例方法名Arrays.sort(student, s::compareByHeight);//按学生身高来排序}
}//学生类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private String name;private int age;//一个静态方法public static int Compare(Student o1, Student o2) {return o1.getAge()- o2.getAge();}//实例方法public int compareByHeight(Student o1, Student o2) {使用了Double的方法return Double.compare(o1.getHeight()-o2.getHeight(), o2.getHeight());}
}
  • 特定类型方法引用: 类型名称 ::方法名
public class test {public static void main(String[] args) {//举例:给一堆字符串数组元素,忽略大小写,对字母进行比较,其中使用了compareToIgnoreCase方法//Arrays.sort(数组名,String(主调参数的数据类型)::compareToIgnoreCase);}
}
  • 构造器引用

    • 如果某个Lambda表达式里只是在创建对象,并且“->”前后参数情况一致,就可以使用构造器引用。
    • 类名::new
    //举例:
    CarFactory cf = name->new Car(name);
    //可简化为:
    CarFactory cf = Car::new;//构造器引用
    

常用API

  • String 创建对象的区别
    • 以String s = "........."的形式创建的字符串对象会存储到堆中的字符串常量池,且相同内容只存储一份。(节约内存)
    • 以String s = new String( )形式创建的字符串对象,每new一次都会产生一个新的对象放在内存堆中。
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//trueString s3=new String("abc");
String s4=new String("abc");
System.out.println(s3==s4);//false
  • ArrayList集合
    • 长度size
    • ArrayList<> list = new ArrayList<>( );//用泛型定义集合类型

image

GUI编程

  • GUI编程包:Swing(不依赖与本地窗口系统)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python: 把png的透明背景转为指定颜色

一,代码: import base64 import numpy as np from PIL import Image import io from PIL import Image, ImageFilter from io import BytesIOdata_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAA…

代码源2025长训_noip

NOIP 11/4 Day 1 A 题解:题读错浪费 2h。注意到其实题目给定了每个点的所有出边的编号可能。这也就是说只要我们从叶子节点开始,由于叶子节点的度数为 \(1\) 则那条边一定会确定。那么我们如果从叶子开始往上转移,每…

PySpark - PCA

PySpark - PCA from pyspark.ml.feature import PCApca = PCA(k=2, inputCol=features, outputCol=pca_features) pca_model = pca.fit(df) pca_df = pca_model.transform(df) pca_df.show(truncate=False) +---+-----…

组合博弈 sg函数 Nim游戏的板子默写

简单的取子用sg(x)==0 判断不就可以了吗!!! 所有游戏单个子游戏的思想 1.sg(x)有向无环图上的棋子游戏 每个棋子和它的出边都构成单独的有向无环图 通过一个棋子的所有后继节点我们可以得到这个点的sg ans是所有点的…

详细介绍:Ribbon是如何与服务注册中心nacos交互的

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Day46(16)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project02\tlias-web-management

事务管理@Transactional(rollbackFor = {Exception.class})//事务管理的注解 - 默认出现RuntimeException才会回滚 @Override public void save(Emp emp) throws Exception{//1.保存员工的基本信息emp.setCreateTime(L…

完整教程:日本生活-东京新干线乘车经验-流程介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

代码随想录算法训练营第三天:链表part01

代码随想录算法训练营第三天:链表part01**203.移除链表元素 ** leetcode链接:https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所…

2025-07-21-Mon-T-RocketMQ

1. 核心功能 1.1 MQ介绍 RocketMQ基本组件Topic: 消息归类的基本单元 Queue: 消息队列 Producer Consumer ConsumerGroup: NameServer:可以理解为注册中心,负责更新和发现Broker Broker集群:Broker 可以有一个或…

第一章 简介

关于简介这一章,作者简单阐明了CPU,GPU过去的发展,以及它们的差异。除此之外,作者还引入了CUDA,介绍了CUDA的代码类型,以及全书的结构。 此章值得注意的点如下: 1、GPU上的晶体管数量超过CPU上的。 2、两设备之间…

2025-07-13-Sun-T-AI-LangChain4j

1. 认识AI 1.1 神经元介绍 黑马LangChain4j入门到实战项目: 项目地址 软件架构 前端:静态页面后端框架:SpringbootLangchain4j + Ollama持久化:本地文件存储对话记录 (resources/memory) 用户预约信息存储在内存(…

P24_现有网络模型的使用及修改

P24_现有网络模型的使用及修改24.1 VGG16网络模型: (1)打开pytorch(0.9.0)—torchvision.models—VGG(2)参数点击查看代码 pretrained (bool) – If True, returns a model pre-trained on ImageNet progress (bo…

20232403 2025-2026-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 主要内容:使用ARP扫描和nmap进行主机发现与端口扫描、Vsftpd后门漏洞获得root权限、Samba命令注入漏洞获取系统访问、Java RMI反序列化漏洞建立Meterpreter会话、PHP CGI参数注入漏洞。 掌握Metasploit命令…

第二讲类神经网络训练不起来

第二讲类神经网络训练不起来 一.优化失败的原因梯度为0有可能是local minima 和saddle point 因为计算优化的终止条件是梯度为0,但有可能梯度为0仅是局部最小值local minima或鞍点saddle point(多维,在某些维度是最…

【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统 - 教程

【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统 - 教程2025-11-23 21:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

2025-01-24-Fri-T-如何做一个开源项目

创建和维护一个开源项目是一个非常有意义的工作,它可以帮助你与全球开发者合作,同时建立个人或团队的影响力。以下是详细步骤,帮你从零开始创建一个成功的开源项目。 1. 确定项目目标 解决实际问题:选择一个对你或…

利用大语言模型分析技术支持诈骗Facebook群组的网络犯罪研究

本文介绍了一项利用大语言模型分析Facebook上技术支持诈骗群组的研究,涉及38万条帖子的分类分析,揭示了网络犯罪服务的运作模式和最新趋势。网络犯罪与刑罚:我们在APWG eCrimes会议上关于技术支持诈骗Facebook群组的…

一些唐话

学OI学的言论均为转载 不保证言论可读你干嘛直接放 *3500 啊?!正经比赛里不是这样的!你应该先放两个简单签到,然后提升我的心态。偶尔给我送送强点的大样例,然后在那个我上厕所的时候跟我有神秘互动。最后在某个我…

2025-05-29-Thu-T-设计模式

目录1. 设计模式相关内容介绍1.1 设计模式概述1.2 UML类图类的表示方式类之间的关系表示方法1.3 软件设计原则1.1 开闭原则1.2 里氏代换原则1.3 依赖倒转/依赖倒置原则1.4 接口隔离原则1.5 迪米特法则1.6 合成复用原则…

2025-05-27-Tue-T-JVM

目录1 JVM与Java体系结构1.1 JVM 结构简图1.2 Java代码执行流程1.3 JVM的架构模型1.4 JVM的生命周期一、内存结构1. 程序计数器2. 虚拟机栈2.1 定义2.2 栈内存溢出2.3 线程运行诊断3. 本地方法栈4. 堆4.1 定义4.2 堆内…