软件设计之Java入门视频(11)

news2024/12/26 21:02:02

软件设计之Java入门视频(11)

视频教程来自B站尚硅谷:

尚硅谷Java入门视频教程,宋红康java基础视频
相关文件资料(百度网盘)
提取密码:8op3
idea 下载可以关注 软件管家 公众号

学习内容:

该视频共分为1-717部分
本次内容涉及300-329
在写代码时,总是需要来回切换界面来看代码要求,这里推荐Snipaste,可以把截图以窗口形式放在屏幕上
记录内容:

  1. toString()
  2. JUnit单元测试
  3. 包装类的使用
  4. static
  5. 单例设计模式

1、toString()

1)当输出一个对象的引用时,实际就是调用当前对象的toString()方法
2)像String、Date、File、包装类等都重写了Object类中的toString()方法

Customer cust = new Customer (); //构造一个customer类的对象
System.out.println(cust);
System.out.println(cust.toString());//效果相同
//输出 类名+@ +地址
//****toString定义****
  public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
//String类的toString方法
String str = new String("AB");
System.out.println(str.toString());//输出AB

2、JUnit单元测试

目的:将测试代码单独作为单元进行单独测试
创建Java类进行单元测试:
1)此时Java类需要满足两个要求:(1)此类是public(2)此类提供公共的无参构造器
2)此类中声明单元测试方法:(1)方法权限是public(2)没有返回值,没有形参
单元测试方法上一行需要声明注解:@Test
1)在单元测试类中导入 import org.junit.Test;
2) 鼠标放在Test上,alt + enter 导入junit4 包 这是很重要的一步
写完代码后在需要执行测试方法的地方,右键测试方法名运行

package test;

import org.junit.Test;

import java.sql.SQLOutput;
import java.util.Date;

public class JUnityTest {
    @Test
    public void testEquals(){
        String s1 = "MM";
        String s2 = "MM";
        System.out.println(s1);
    }
    @Test
    public void testEquals1(){
        String s1 = "GG";
        String s2 = "GG";
        System.out.println(s1);
    }
}

3、包装类的使用

1)Java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
2)基本数据类型、包装类、String三者之间的转换重点

在这里插入图片描述

基本数据类型与包装类的转换

package test;

import org.junit.Test;

public class WrapperTest {
    //基本数据类型-->包装类:调用包装类的构造器
    @Test
    public void test1(){
        int num1 = 10;
        Integer in1 = new Integer(num1);
        System.out.println(in1.toString());

        Integer in2 = new Integer("123"); //这里只能是数字
        System.out.println(in2.toString());

        Order order = new Order();
        System.out.println(order.isMale); //false
        System.out.println(order.isFemale);//null
    }
    //包装类-->基本数据类型:调用包装类的xxxValue()
    @Test
    public void test2(){
        Integer in1 = new Integer(12);
        int i1 = in1.intValue();
        System.out.println(i1); //12

    }
    @Test
    public void test3(){
        int num1 = 10;
        method(num1); //JDK5.0特性:自动装箱与自动拆箱
    }
    public void method (Object obj){
        System.out.println(obj.toString());
    }
}
class Order {
    boolean isMale;
    Boolean isFemale;
}

自动装箱与自动拆箱

基本数据类型–>包装类:自动装箱
包装类–>基本数据类型:自动拆箱

int num = 10;
Integer in1 = num;  //自动装箱
int num1 = in1 ; //自动拆箱

基本数据类型、包装类与String转换

package test;

import org.junit.Test;

public class WrapperTest {
    //基本数据类型、包装类-->String类型:调用String重载的ValueOf(Xxx xxx)
    @Test
    public void test1() {
        int num1 = 10;
        //方法1:连接运算
        String str1 = num1 + "";
        //方法2:
        float f1 = 12.3f;
        String str = String.valueOf(f1);//"12.3"
        System.out.println(str);
    }
    //String类型-->:基本数据类型、包装类 :调用包装类中的parseXxx(String s)
    @Test
    public void test2() {
        String str1 = "123";
        int num2 = Integer.parseInt(str1);
        String str2 = "TrUe";
        boolean b1 = Boolean.parseBoolean(str2);
        System.out.println(b1); //ture
    }
}

训练题1

当三元运算符中的两个表达式类型不同时,编译器会尝试找到一个共同的类型,以确保结果类型兼容。这通常通过自动类型提升(类型转换)来实现。

Object o1 = true ? new Integer(1) : new Double(2.0); //new Integer(1)自动提升为double类型了
System.out.println(o1);//1.0

训练题2

1)Integer内部定义了IntegerCache结构,IntegerCache中定义了Interger[]
2)其保存了从-128~127范围的整数,如果使用自动装箱方式给Integer赋值该范围的数值时,可以直接使用数组中的元素,不必在new一个新的。

package test;
import org.junit.Test;
public class WrapperTest {
    @Test
    public void method1() {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j); //false
        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n);//true
        Integer x = 128;//相当于new了一个Integer对象
        Integer y = 128;//相当于new了一个Integer对象
        System.out.println(x == y);//false
    }
}

4、static

1)static:静态的 可以用来修饰:属性、方法、代码块、内部类
2)使用statci修饰属性: 静态变量(类变量)
  a)属性按是否使用static修饰,分为静态属性非静态属性(实例变量)
  b)实例变量:我们创建类的多个对象,每个对象都单独拥有一套类的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值发生改变
  c)我们创建类的多个对象,每个对象共享同一个静态变量。当通过某一对象修改静态变量时,会导致其他对象调用此静态变量时,静态变量值是修改后的
  d)静态变量随着类的加载而加载,可以通过"类.静态变量"的方式调用
  e)静态变量的加载要早于对象的创建
  f)由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中
3)使用statci修饰方法:静态方法
  a)静态方法中,只能调用静态的方法或属性
  b)非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
  c)`注意点:``静态方法内不能使用this、super关键字
4)如何确定一个属性/方法是否要声明static?
a)属性可以被多个对象共享的;
b)操作静态属性的方法,通常设置为static
c)工具类中的方法,习惯上声明为static,比如:Math、Arrays

类变量和实例变量的内存解析

在这里插入图片描述

5、单例设计模式

1)对某个类只能存在一个对象实例

饿汉式

package test;

import java.sql.SQLOutput;

public class CircleTest {
    public static void main(String[] args) {
    Bank bank1 = Bank.getInstance();
    Bank bank2 = Bank.getInstance();
    System.out.println(bank1==bank2);//返回true
    }
}

class Bank{
    //1. 私有化类的构造器
    private Bank(){

    }
    //2. 内部创建类的对象
    //4. 要求此对象也必须声明为静态的
    private static Bank instance = new Bank();
    //3. 提供公共的方法,返回类的对象
    public static Bank getInstance(){ //static原因是外部不让生成对象,只能类去调
        return instance;//static方法只能操作static属性
    }
}

懒汉式

package test;
public class CircleTest {
    public static void main(String[] args) {
        Order order1 = Order.getInstance();
        Order order2 = Order.getInstance();
        System.out.println(order1==order2);
    }
}

class Order{
    //1. 私有化类的构造器
    private Order() {
    }
    //2. 声明当前类的变量,没有初始化
    private static Order instance = null;
    //4. 要求此对象也必须声明为静态的
    //3. 提供公共的方法,返回类的对象
    public static Order getInstance() {
        if (instance == null) {
            instance = new Order();
        }
        return instance;
    }
}

区分饿汉式与懒汉式

饿汉式
1)坏处:对象时间加载过长
2)好处:饿汉式是线程安全的
懒汉式
1)好处:延迟对象的创建
2)坏处:目前写法线程不安全—>多线程再做修改

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

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

相关文章

【C++】 解决 C++ 语言报错:Memory Leak

文章目录 引言 内存泄漏(Memory Leak)是 C 编程中常见且严重的内存管理问题之一。当程序分配了内存而没有正确释放,导致内存无法被重新利用时,就会发生内存泄漏。这种错误会导致程序占用越来越多的内存,最终可能导致系…

Using a text embedding model locally with semantic kernel

题意:在本地使用带有语义核(Semantic Kernel)的文本嵌入模型 问题背景: Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

C++基础21 二维数组及相关问题详解

这是《C算法宝典》C基础篇的第21节文章啦~ 如果你之前没有太多C基础,请点击👉C基础,如果你C语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦 ​ 目…

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域,Transformer模型凭借其在自然语言处理(NLP)中的卓越表现,迅速成为研究热点。尤其是基于自注意力(Self-Attention)机制的模型,更是推动了NLP的飞速发展。然而&#xff0c…

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式,lvgl的布局方式比较少,目前只有flex和grid两大类布局,即弹性布局和网格布局,弹性布局一般就是指定相对位置,网格布局就是将整个页面划分为网格状,我们做其它的UI…

【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征,而不是舍弃那些认为不重要的特征,最常见的一种做法就是使用词频-逆向文档频率(tf-idf)。这一方法对某个特定文档中经常出现的术语给与很高的权重,但是堆在语料库的许多文档…

pandas,dataframe使用笔记

目录 新建一个dataframe不带列名带列名 dataframe添加一行内容查看dataframe某列的数据类型新建dataframe时设置了列名,则数据类型为object dataframe的保存保存为csv文件保存为excel文件 dataframe属于pandas 新建一个dataframe 不带列名 df pd.DataFrame() 带…

【Linux开发】基于ALSA库实现音量调节

基于ALSA库实现音量调节 ALSA库实现音量调节1、使用alsamixer工具查看音频接口2、完整代码2.1、snd_mixer_open2.2、snd_mixer_attach、2.3、snd_mixer_selem_register2.4、snd_mixer_load2.5、snd_mixer_first_elem/snd_mixer_elem_next2.6、snd_mixer_selem_get_playback_vol…

江汉大学刘春萌同学整理的wifi模块 上传mqtt实验步骤

一.固件烧录 1.打开安信可官网 2.点击wifi模组系列的ESP8266 3.点击各类固件后选择固件号1471下载 4.打开烧录工具将下载的二进制文件导入并将后面的起始地址写为0x00000,下面勾选40mhz QIO 8Mbit点击start下载即可 二.本地部署mqtt服务器(windows) 1.下载mosquitto后有一个m…

数据驱动下的SaaS渠道精细化运营:提升ROI的实战指南

在当今数字化转型的大潮中,SaaS(Software as a Service)企业面临着日益激烈的市场竞争。为了在市场中脱颖而出,实现可持续增长,SaaS企业必须转向更为精细化的运营模式,而数据驱动则是实现这一目标的关键。本…

NoSQL 非关系型数据库 Redis 的使用:

redis是基于内存型的NoSQL 非关系型数据库,本内容只针对有基础的小伙伴, 因为楼主不会做更多的解释,而是记录更多的技术接口使用,毕竟楼主不是做教学的,没有教学经验。 关于redis的介绍请自行搜索查阅。 使用redis数据…

Java后端每日面试题(day3)

目录 Spring中Bean的作用域有哪些?Spring中Bean的生命周期Bean 是线程安全的吗?了解Spring Boot中的日志组件吗? Spring中Bean的作用域有哪些? Bean的作用域: singleton:单例,Spring中的bean默…

一种频偏估计与补偿方法

一种简易的频偏估计补偿方法,使用QAM等信号。估计精度受FFT长度限制,可以作为粗频偏估计。 Nfft 1024; % FFT长度 N 10*Nfft; % 仿真符号数 M 16; % 调制QAM16 freq 1e…

PDF合并怎么做?分享几种简单好用的PDF合并方法

PDF文件以其良好的兼容性和稳定的格式,成为了我们日常办公、学习不可或缺的一部分。然而,随着PDF文件的不断增多,如何高效管理这些文件,特别是如何将多个PDF文件合并成一个,成为了许多人头疼的问题。下面给大家分享几款…

超参数优化方法之贝叶斯优化实现流程及代码

超参数优化方法之贝叶斯优化实现流程及代码 在机器学习模型的训练过程中,超参数的选择往往对模型性能有着决定性的影响。贝叶斯优化作为一种高效的超参数调优方法,以其在高维空间中的搜索效率和对最优化问题的独特见解而受到关注。本文将深入探讨贝叶斯…

CTF常用sql注入(三)无列名注入

0x06 无列名 适用于无法正确的查出结果,比如把information_schema给过滤了 join 联合 select * from users;select 1,2,3 union select * from users;列名被替换成了1,2,3, 我们再利用子查询和别名查 select 2 from (select 1,2,3 union select * f…

QT 布局演示例子

效果 源码 #include <QApplication> #include <QWidget> #include <QSplitter> #include <QVBoxLayout> #include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget mainWidget;mainWidget.setWindowTitle(&qu…

适合金融行业的国产传输软件应该是怎样的?

对于金融行业来说&#xff0c;正常业务开展离不开文件传输场景&#xff0c;一般来说&#xff0c;金融行业常用的文件传输工具有IM通讯、邮件、自建文件传输系统、FTP应用、U盘等&#xff0c;这些传输工具可以基础实现金融机构的文件传输需求&#xff0c;但也存在如下问题&#…

价值499的从Emlog主题模板PandaPRO移植到wordpress的主题

Panda PRO 主题&#xff0c;一款精致wordpress博客主题&#xff0c;令人惊叹的昼夜双版设计&#xff0c;精心打磨的一处处细节&#xff0c;一切从心出发&#xff0c;从零开始&#xff0c;只为让您的站点拥有速度与优雅兼具的极致体验。 从Emlog主题模板PandaPRO移植到wordpres…

VCL界面组件DevExpress VCL v24.1 - 发布全新的矢量主题

DevExpress VCL是DevExpress公司旗下最老牌的用户界面套包&#xff0c;所包含的控件有&#xff1a;数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下一代应用程…