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

软件设计之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.mfbz.cn/a/775761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 24.04 上安装 Kubernetes,超级详细的教程!

Kubernetes 是一个免费的开源容器编排工具,它允许基于容器的应用程序的自动化部署、扩展和管理。 我们将介绍如何使用 Kubeadm 逐步在 Ubuntu 24.04 上安装 Kubernetes 此次演示中,我们将使用以下三个 Ubuntu 24.04 实例 Instance 1 : Master Node (k…

计算机视觉——opencv快速入门(二) 图像的基本操作

前言 上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。 图像的读取,显示与存储 读取图像文件 在opencv中我们利用imread函数来读取图像文件,函数语法如下: imagecv2.imre…

植物大战僵尸融合版最新版1.0下载及安装教程

《植物大战僵尸融合版》最新版1.0已经发布,为粉丝们带来了全新的游戏体验。这个版本由B站UP主蓝飘飘fly精心打造,引入了创新的植物融合玩法,让玩家可以享受策略和创意的结合。以下是游戏的详细介绍和安装指南: 游戏特色介绍 全新…

TF-IDF计算过程一步步推导详解含代码演示

相关概念 TF-IDF TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在…

lua入门(2) - 数据类型

前言 本文参考自: Lua 数据类型 | 菜鸟教程 (runoob.com) 希望详细了解的小伙伴还请查看上方链接: 八个基本类型 type - 函数查看数据类型: 测试程序: print(type("Hello world")) --> string print(type(10.4*3)) --> number print(t…

pdf可以删除其中一页吗?6个软件教你快速进行pdf编辑

pdf可以删除其中一页吗?6个软件教你快速进行pdf编辑 编辑PDF文件并删除特定页面是处理文档时常见的需求,特别是在需要定制或精简文件内容时。以下是几款广受欢迎的PDF编辑软件,它们提供了强大的页面删除功能,帮助用户轻松管理和修…

Vue3学习笔记(n.0)

vue指令之v-for 首先创建自定义组件&#xff08;practice5.vue&#xff09;&#xff1a; <!--* Author: RealRoad1083425287qq.com* Date: 2024-07-05 21:28:45* LastEditors: Mei* LastEditTime: 2024-07-05 21:35:40* FilePath: \Fighting\new_project_0705\my-vue-app\…

安卓开发定时截屏

此处有两种方式&#xff1a;&#xff08;都是定时截屏&#xff0c;不需要定时功能可以剔除service&#xff09; 1.app内截屏 https://download.csdn.net/download/hdhhd/89517797 2.截取当前任意手机显示屏幕 https://download.csdn.net/download/hdhhd/89517800 第一种…

hitcontraining_uaf

BUUCTF[PWN][堆] 题目&#xff1a;BUUCTF在线评测 (buuoj.cn) 程序del是没有将申请的指针清零&#xff0c;导致可以再次调用输出print。 查看add_note函数&#xff1a;根据当前 notelist 是否为空&#xff0c;来申请了一个8字节的空间将地址(指针)放在notelist[i]中&#xff…

海尔智家:科技优秀是一种习惯

海尔智家&#xff1a;科技优秀是一种习惯 2024-06-28 15:19代锡海 6月24日&#xff0c;2023年度国家科学技术奖正式揭晓。海尔智家“温湿氧磁多维精准控制家用保鲜电器技术创新与产业化”项目荣获国家科学技术进步奖&#xff0c;成为家电行业唯一牵头获奖企业。 很多人说&…

RK3568平台(USB篇)TYPE-C接口与PD协议

一.TYPE-C接口简介 type-c 插座&#xff1a; type-c 插头&#xff1a; type-c 线缆&#xff1a; type-c 接口定义之插座&#xff1a; type-c 硬件原理图&#xff1a; VBUS&#xff1a;供电引脚&#xff0c;用于传输电源电压&#xff0c;一般为5V或12V。 GND&#xff1a;地引…

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流 地表最强大的高级学术AI专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣的朋友可…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

文件扫描pdf怎么弄?5个简易高效的文件扫描方法

在繁忙的工作中&#xff0c;我们常常需要将纸质文件快速转换为电子文档&#xff0c;以便于编辑、存储或分享。 无论是合同、报告还是笔记&#xff0c;将这些纸质文件转换为Word格式&#xff0c;不仅能提高工作效率&#xff0c;还能确保信息的安全备份。然而&#xff0c;面对市…

Web3 ETF的主要功能

Web3 ETF的主要功能可以概括为以下几点&#xff0c;Web3 ETF仍是一项新兴投资产品&#xff0c;其长期表现仍存在不确定性。投资者在投资Web3 ETF之前应仔细研究相关风险&#xff0c;并做好充分的风险评估。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

如何爱上阅读及阅读的意义有哪些?

第一个是“情绪决定”&#xff0c;比如看到人家健身&#xff0c;摄影&#xff0c;画画时&#xff0c;自己的肾上腺素开始飙升&#xff0c;马上表示自己也想做&#xff1b; 第二个是“理智决定”&#xff0c;理智决定同样表示想要一样东西&#xff0c;但表示人必定已经想好了为…

[pwn]静态编译

静态编译 1. 栈足够大的情况下 程序在ida打开后&#xff0c;左侧的函数栏目没有红色&#xff08;系统调用的函数&#xff09;&#xff0c;而只有一些静态函数&#xff0c;通常这类文件的大小会必普通的pwn题程序要大得多。 这种静态编译的题没有调用库函数&#xff0c;也就没…

Prometheus + Grafana 监控系统-PrometheusAlert安装与配置指南

背景 Grafana 目前对国内主流的消息通知渠道兼容性一般&#xff0c;因此可以考虑结合使用国产的 PrometheusAlert PrometheusAlert是开源的运维告警中心消息转发系统&#xff0c;支持主流的监控系统Prometheus、Zabbix&#xff0c;日志系统Graylog2&#xff0c;Graylog3、数据…

华为云生态和快速入门

华为云生态 新技术催生新物种&#xff0c;新物种推动新生态 数字技术催生各类运营商去重塑并颠覆各行业的商业模式 从业务层面看&#xff0c;企业始终如一的目标是业务增长和持续盈利&#xff0c;围绕这些目标衍生出提质、增效、降本、安全、创新和合规的业务诉求&#xff0c…

树形结构C语言的实现

一.什么是树&#xff1a; 树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构&#xff0c;所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构&#xff1a;一棵树可以简单的表示为根&#xff0c;左子树&#xff0c;右子树。左子树…