• 代码块
  1. 静态代码块:有static修饰,属于类,与类一起优先加载,自动执行一次

  2. 实例代码块:无static修饰,属于对象,每次创建对象时,都会优先执行一次。

package com.itheima.code;import java.util.Arrays;public class CodeDemo1 {public static String schoolName;public static String[] cards = new String[3];//静态代码快:有static修饰,属于类,与类一起优先加载,自动执行一次//基本作用:可以完成对象的静态资源的初始化static{System.out.println("静态代码块执行了");schoolName = "黑马程序员";cards[0] = "大王";cards[1] = "小王";}public static void main(String[] args) {System.out.println("main方法执行了");System.out.println(schoolName);System.out.println(Arrays.toString(cards));}
}

输出:

静态代码块执行了
main方法执行了
黑马程序员
[大王, 小王, null]

package com.itheima.code;public class CodeDemo2 {private String name;private String[] direction = new String[4];//实例代码块:无static修饰,属于对象,每次创建对象时,都会优先执行一次。//基本作用:初始化对象的实例资源。{System.out.println("实例代码块执行了");name = "itheima";direction[0] = "N";direction[1] = "S";direction[2] = "E";direction[3] = "W";}public static void main(String[] args) {System.out.println("main方法执行了");new CodeDemo2();}
}

输出:

main方法执行了
实例代码块执行了



  • 成员内部类
  1. 成员内部类创建对象的格式:外部类名称.内部类名称 对象名 = new 外部类名称().内部类名称();

  2. 可以直接访问外部类的实例成员、静态成员

  3. 可以拿到当前外部类对象,格式是:外部类名.this。

package innerClass;public class Outer {public static String schoolName = "黑马";public static void test(){System.out.println("Outer.test()");}private int age;public void run(){}//成员内部类:无static修饰,属于外部类的对象持有public class Inner{public void show(){System.out.println("show");//成员内部类中可以直接访问外部类的静态成员System.out.println(schoolName);test();//也可以直接访问外部类的实例成员System.out.println(age);run();System.out.println(this);System.out.println(Outer.this);}}
}
package innerClass;public class Test {//成员内部类创建对象的格式://    //外部类名称.内部类名称 对象名 = new 外部类名称().内部类名称();public static void main(String[] args) {Outer.Inner inner = new Outer().new Inner();inner.show();}
}
class People{private int heartBeat = 100;public class Heart{private int heartBeat = 80;public void show(){int heartBeat = 200;System.out.println(heartBeat);//200System.out.println(this.heartBeat);//80System.out.println(People.this.heartBeat);//100}}
}


  • 静态内部类
  1. 静态内部类:属于外部类本身持有

  2. 静态内部类中可以直接访问外部类的静态成员

  3. 静态内部类中不可以直接访问外部类的实例成员

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

package Innerclass2;public class Outer {public static String schoolName ;private int age;//静态内部类:属于外部类本身持有public static class Inner{public void show(){//静态内部类中可以直接访问外部类的静态成员System.out.println(schoolName);//静态内部类中不可以直接访问外部类的实例成员//System.out.println(age);报错}}
}
package Innerclass2;public class Test {public static void main(String[] args) {//创建格式:外部类名称.内部类名称 对象名 = new 外部类名称.内部类名称();Outer.Inner inner = new Outer.Inner();inner.show();}
}


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

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

package innerclass3;public abstract class Animal {public abstract void cry();
}
package innerclass3;public class Test {public static void main(String[] args) {//匿名内部类实际上是有名字:外部类名$编号.class//匿名内部类本质是一个子类,同时会立即构建一个子类对象Animal a = new Animal(){@Overridepublic void cry() {System.out.println("猫会喵喵喵叫");}};a.cry();}
}
  • 匿名内部类的常见使用形式:通常可以作为一个对象参数传输给方法使用
  • package innerclass3;public class Test2 {public static void main(String[] args) {//匿名内部类的使用形式:通常可以作为一个对象参数传输给方法使用Swim s1 = new Swim(){@Overridepublic void swim() {System.out.println("学生游泳慢");}};start(s1);start(new Swim() {@Overridepublic void swim() {System.out.println("老师游泳快");}});}public static void start(Swim s){System.out.println("开始");s.swim();System.out.println("结束");}
    }
    interface Swim{void swim();
    }
  • 匿名内部类使用场景
package innerclass3;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Test3 {//需求:创建一个登录窗口,窗口上只有一个登录按钮public static void main(String[] args) {JFrame win = new JFrame("登录窗口");win.setSize(400,300);win.setLocationRelativeTo(null);//居中显示win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序JPanel panel = new JPanel();win.add( panel);JButton btn = new JButton("登录");panel.add(btn);//java要求必须给这个按钮添加一个点击事件监听器对象,这样就可以监听用户的点击操作,就可以做出反应。btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("点击了登录按钮");}});win.setVisible(true);}
}
  • 使用comparator接口的匿名内部类实现对数组进行排序
package innerclass3;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {//姓名 年龄 private String name;private int age;
}
package innerclass3;import java.util.Arrays;
import java.util.Comparator;public class Test4 {public static void main(String[] args) {Student[] students = new Student[3];students[0] = new Student("张三", 18);students[1] = new Student("李四", 17);students[2] = new Student("王五", 19);//按照年龄从大到小排序Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o2.getAge() - o1.getAge();}});for (Student student : students){System.out.println(student.getName() + " " + student.getAge());}}
}


  • Lambda的认识
  1. Lambda只能简化函数式接口的匿名内部类

  2. 写法:(被重写方法的形参列表)->{被重写方法的方法体代码。}

package lambda;
//Lambda只能简化函数式接口的匿名内部类
//写法:(被重写方法的形参列表)->{被重写方法的方法体代码。}
public class LambdaDemo1 {public static void main(String[] args) {Swim s = new Swim() {@Overridepublic void swimming() {System.out.println("我要开始游泳了");}};s.swimming();Swim s1 = () -> {System.out.println("我要开始游泳了");};s1.swimming();}
}
//函数式接口:只有一个抽象方法的接口。
@FunctionalInterface//声明函数式接口的注解。
interface Swim{void swimming();
}
  • Lambda的省略规则:用于进一步简化Lambda表达式的写法。
  1. 参数类型全部可以省略不写。
  2. 如果只有一个参数,参数类型省略的同时“()”也可以省略,但多个参数不能省略“()”
  3. 如果Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号“;”如果这行代码是return语句,也必须去掉return。
        //按照年龄从大到小排序
//        Arrays.sort(students, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return o2.getAge() - o1.getAge();//按照年龄降序
//            }
//        });//        Arrays.sort(students, (Student o1, Student o2) -> {
//            return o2.getAge() - o1.getAge();
//        });//        Arrays.sort(students, ( o1,  o2) -> {
//            return o2.getAge() - o1.getAge();
//        });Arrays.sort(students, (o1,  o2) ->o2.getAge() - o1.getAge());
  • 静态方法引用:类名::静态方法名

package innerclass3;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {//姓名 年龄private String name;private int age;public static int compareByAge(Student s1,Student s2){return s2.getAge() - s1.getAge();}
}
        //按照年龄从大到小排序//        Arrays.sort(students, (o1,  o2) ->
//            o2.getAge() - o1.getAge()
//        );//静态方法引用:类名::静态方法名Arrays.sort(students, Student::compareByAge);
  • 实例方法引用:对象名::实例方法

package innerclass3;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {//姓名 年龄private String name;private int age;private double score;//静态方法public static int compareByAge(Student s1,Student s2){return s2.getAge() - s1.getAge();}//实例方法public int compareByScore(Student s1,Student s2){return Double.compare(s2.getScore(),s1.getScore());}
}
      //静态方法引用:类名::静态方法名Arrays.sort(students, Student::compareByAge);//实例方法引用:对象名::实例方法Student t = new Student();Arrays.sort(students, t::compareByScore);
  • 特定类的方法引用:类型名称::方法名
  • 使用场景:如果某个Lambda表达式里只是调用一个特定类型的实例方法,并且前面参数中的第一个参数作为方法的主调,后面的所有参数都是作为改实例方法的入参,则此时就可以使用特定类型的方法引用。
package lambda;import java.util.Arrays;public class ddemo {public static void main(String[] args) {String[] names = {"Tom","Jerry","angle","Andy"};//忽略大小写,进行升序排列Arrays.sort(names,(s1,s2) -> s1.compareToIgnoreCase(s2));//特定类型方法引用:类型名称::方法名Arrays.sort(names,String::compareToIgnoreCase);System.out.println(Arrays.toString(names));}
}
  • 构造器引用:类名::new
  • 使用场景:如果某个Lambda表达式里只是在创建对象,并且“->”前后参数情况一致,就可以使用构造器引用。

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

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

相关文章

文献综述写作指南:从海量文献到逻辑闭环的实战模板

文献综述往往是学术写作的“第一关难题”&#xff1a;面对成百上千篇文献&#xff0c;如何避免“简单罗列”的陷阱&#xff0c;梳理出有逻辑、有洞见的论述体系&#xff1f;本文结合学术写作实践&#xff0c;总结出一套模块化的文献综述“实战模板”&#xff0c;通过结构化方法…

CuTe C++ 简介01,从示例开始

这里先仅仅关注 C 层的介绍&#xff0c;python DSL 以后再说。在 ubuntu 22.04 X64 中&#xff0c;RTX 50801. 环境搭建1.1 安装 cuda1.2 下载源码git clone https://github.com/NVIDIA/cutlass.git1.3 编译mkdir build/ cmake .. -DCUTLASS_NVCC_ARCHS"120" -DCMAK…

Python实现异步多线程Web服务器:从原理到实践

目录Python实现异步多线程Web服务器&#xff1a;从原理到实践引言第一章&#xff1a;Web服务器基础1.1 Web服务器的工作原理1.2 HTTP协议简介1.3 同步 vs 异步 vs 多线程第二章&#xff1a;Python异步编程基础2.1 异步I/O概念2.2 协程与async/await2.3 事件循环第三章&#xff…

Deep Think with Confidence:llm如何进行高效率COT推理优化

1. 引言:大模型的推理解码优化 大型语言模型(LLM)在处理数学、编码等复杂推理任务时,一种强大但“耗能巨大”的技术是self-consistency,也称并行思考(parallel thinking)。其核心思想是让模型对同一个问题生成多条不同的“思考路径”(reasoning traces),然后通过多数…

vscode克隆远程代码步骤

一、直接使用VsCode1.复制git的https链接代码2.在vscode中点击 代码管理-克隆仓库3.粘贴&#xff08;在git里面复制的https链接&#xff09;4.选择需要存储的文件位置5.确认6.代码克隆成功二、使用命令行克隆1.确定文件放置位置&#xff0c;右键2.复制git的https链接代码3.粘贴…

spi总线

一、介绍SPI总线&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种高速全双工同步串行通信总线&#xff0c;核心通过“主从架构同步时钟”实现设备间数据传输&#xff0c;因结构简单、速率高&#xff0c;广泛用于MCU与传感器、存储芯片、显示…

COLA:大型语言模型高效微调的革命性框架

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 COLA技术概述 COLA&#xff08;Chain of LoRA&#xff09;是一种创…

数据结构与算法:线段树(三):维护更多信息

前言 这次的题思维上倒不是很难&#xff0c;就是代码量比较大。 一、开关 洛谷的这种板子题写起来比cf顺多了&#xff08;&#xff09; #include <bits/stdc.h> using namespace std;typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll&…

【LeetCode_27】移除元素

刷爆LeetCode系列LeetCode27题&#xff1a;github地址前言题目描述题目思路分析代码实现算法代码优化LeetCode27题&#xff1a; github地址 有梦想的电信狗 前言 本文用C实现LeetCode 第27题 题目描述 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ …

C++11语言(三)

一、引言上期我们介绍了C11的大部分特性。C11的初始化列表、auto关键字、右值引用、万能引用、STL容器的的emplace函数。要补充的是右值引用是不能取地址的&#xff0c;我们程序员一定要遵守相关的语法。操作是未定义的很危险。二、 仿函数和函数指针我们先从仿函数的形…

性能优化三剑客:`memo`, `useCallback`, `useMemo` 详解

性能优化三剑客&#xff1a;memo, useCallback, useMemo 详解 作者&#xff1a;码力无边各位React性能调优师&#xff0c;欢迎来到《React奇妙之旅》的第十二站&#xff01;我是你们的伙伴码力无边。在之前的旅程中&#xff0c;我们已经掌握了如何构建功能丰富的组件&#xff0…

好用的电脑软件、工具推荐和记录

固态硬盘读写测试 AS SSD Benchmark https://gitee.com/qlexcel/common-resource-backup/blob/master/AS%20SSD%20Benchmark.exe 可以测试SSD的持续读写、4K随机读写等性能。也可以测试HDD的性能。 操作非常简单&#xff0c;点击Start(开始)即可测试。 体积小&#xff0c;免安…

Spring Task快速上手

一. 介绍Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑&#xff0c;无需依赖额外组件&#xff08;如 Quartz&#xff09;&#xff0c;配置简单、使用便捷&#xff0c;适合处理周期性执行的任务&#xff08;如定时备份数据、定…

函数(2)

6.定义函数的终极绝杀思路&#xff1a;三个问题&#xff1a;1.我定义函数&#xff0c;是为了干什么事情 函数体、2.我干完这件事&#xff0c;需要什么才能完成 形参3.我干完了&#xff0c;调用处是否需要继续使用 返回值类型需要继续使用 必须写不需要返回 void小程序#include …

BGP路由协议(一):基本概念

###BGP概述 BGP的版本&#xff1a; BGP-1 RFC1105BGP-2 RFC1163BGP-3 RFC1267BGP-4 RFC1771 1994年BGP-4 RFC4271 2006年 AS Autonomous System 自治系统&#xff1a;由一个单一的机构或者组织所管理的一系列IP网络及其设备所构成的集合 根据工作范围的不同&#xff0c;动态路…

mit6.031 2023spring 软件构造 笔记 Testing

当你编码时&#xff0c;目标是使程序正常工作。 但作为测试设计者&#xff0c;你希望让它失败。 这是一个微妙但重要的区别。 为什么软件测试很难&#xff1f; 做不到十分详尽&#xff1a;测试一个 32 位浮点乘法运算 。有 2^64 个测试用例&#xff01;随机或统计测试效果差&am…

【Unity开发】Unity核心学习(三)

四、三维模型导入相关设置 1、Model模型页签&#xff08;1&#xff09;场景相关&#xff08;2&#xff09;网格相关&#xff08;3&#xff09;几何体相关2、Rig操纵&#xff08;骨骼&#xff09;页签 &#xff08;1&#xff09;面板基础信息&#xff08;i&#xff09;None&…

C#语言入门详解(17)字段、属性、索引器、常量

C#语言入门详解&#xff08;17&#xff09;字段、属性、索引器、常量前言一、字段 Field二、属性三、索引器四、常量内容来自刘铁猛C#语言入门详解课程。 参考文档&#xff1a;CSharp language specification 5.0 中文版 前言 类的成员是静态成员 (static member) 或者实例成…

Total PDF Converter多功能 PDF 批量转换工具,无水印 + 高效处理指南

在办公场景中&#xff0c;PDF 格式的 “不可编辑性” 常成为效率瓶颈 —— 从提取文字到格式转换&#xff0c;从批量处理到文档加密&#xff0c;往往需要多款工具协同。Total PDF Converter 破解专业版作为一站式 PDF 解决方案&#xff0c;不仅支持 11 种主流格式转换&#xff…

[Windows] WPS官宣 64位正式版(12.1.0.22525)全新发布!

[Windows] WPS官宣 64位正式版 链接&#xff1a;https://pan.xunlei.com/s/VOYepABmXVfXukzlPdp8SKruA1?pwdeqku# 自2024年5月&#xff0c;WPS 64位版本在WPS社区发布第一个内测体验安装包以来&#xff0c;在近一年多的时间里&#xff0c;经过超过3万名WPS体验者参与版本测试…