Java小白找工作必须领悟的修仙秘籍(一)

news2024/11/25 14:26:04

        当我们走出校园,步入社会,必须得找工作,那么作为it小白你必须拥有过硬的基础应用知识,才能慢慢的适应工作的节奏,以下内容则都是基础中的基础,需要全部进行掌握,因为这里可能有你面试时需要回答的面试题。

一:equals方法

这个方法的返回值是Boolean型,是通过地址来对对象进行判断

        System.out.println(Math.ceil(-11.2));
        String num1 = "hello world";
        String num2 = "hello world";
        String num3 = "hello";
        //在Java中equals是通过对象的地址值来进行比较的    = 则是通过值来进行
        int address = System.identityHashCode(num1);
        int address1 = System.identityHashCode(num2);
        int address2 = System.identityHashCode(num3);
        System.out.println("对象的地址:"+address);
        System.out.println("对象1的地址:"+address1);
        System.out.println("对象2的地址:"+address2);
        System.out.println("判断对象与对象1是否相等"+num1.equals(num2));
        System.out.println("判断对象与对象2是否相等"+num1.equals(num3));

注意:通过System.identityHashCode()来获取对象的地址值

结果进行输出:

那么符号=(等号)呢?

等号则是通过对属性值的比较来判断是否相等。

二:StringBuilder类与String的区别

String是字符串,它的内容是不可变的,但是StringBuilder封装的内容则是将内容放在一个容器中,可以对容器中的内容进行修改,也就是可变的。

将对象封装在StringBuilder类中可以对对象进行各种的操作:反转.添加.删除等操作,可以进入源代码类中对类中的方法进行了解package java.lang包下面

功能案例:反转(功能很多,可以通过源码进行了解)

        String str = "abcd";
        StringBuilder stringBuilder = new StringBuilder(str);
        String reverse = stringBuilder.reverse().toString();
        System.out.println(reverse);

控制台输出:

 三:String创建对象

首先咱们先了解一下Java中堆栈的区别

在Java语言中,栈一般存放方法和基本类型,这里要注意一下,String并不是一个基本的类型,堆一般存放着对象和数组。

String创建对象通常情况下分为两种

      String str = "abcd";
      String str1 = new String("abcd");

这两种创建对象的方式拥有很大区别

String str = "abcd";

区别一:创建的对象存在堆内存中,内容只会有一份,意思就是出现相同的内容,在堆内存中,并不会增加,会用已有的这一个。

String str1 = new String("abcd");

而这种创建对象的方法,则是每一次都会new一个对象在堆内存中。

 这种区别可以这样的理解:方法二实现的流程是先去常量池中创建对象,然后在通过new方法去创建对象,而方法一则是因为在如果常量池中,已经有了这个对象,那么则不会进行创建对象这一步骤,如果没有则是实现方法二的执行流程

new String("a") + new String("b")这行代码执行会创建几个对象

1:中间有一个+这是属于拼接字符串,会创建一个StringBuilderu对象

2:创建一个String对象 new String("a")

3:会在常量池中放一个a对象

4:创建一个String对象 new String("b")

5:会在常量池中放一个b对象

6:调用StringBuilder类中的tostring对象输出ab

四:抽象类与普通类的主要区别 

1:修饰符:必须通过 abstract 关键字来进行修饰。
公式1:(修饰类)修饰符abstract class 类名{}
公式2:(修饰成员方法)修饰符 abstract 返回类型 方法名()
2:抽象类不能被实例化,只能通过创建子类对象。(抽象的意思就是不具体,所以不能 new )
3:抽象类子类的两个选择:
一:重写父类的所有抽象方法
二:把类定义为抽象类

抽象类成员的特点:

  1. 成员变量:
    可以有普通的成员变量
    也可以有成员常量
  2. 成员方法:
    可以有普通方法,也可以有抽象方法
    可以既可以有抽象方法, 也可以有非抽象方法
    有构造方法 并且构造方法可以重载

五:什么是接口?


1:语法格式:[修饰符] interface 接口名 [ extends 父接口名列表]{}
注意:被[ ] 定义的都是可选的,有或者没有都可以。
2:类和接口是实现关系,用implements 类表示
class 类名 implements 接口名
注意: 接口修饰的成员方法中都有默认的修饰方法 public abstract
想要在接口的实现类中的方法实现,必须出现方法重写

接口继承关系的特点:


接口与类是实现的关系

接口与接口之间的关系:继承关系 ,可以是单继承或者是多继承关系(格式 接口 extends接口1,接口2…

继承与实现的区别


1:继承是体现 is a的关系 ,在父类中定义共性的内容
2:实现体现的是like a的关系,接口中定义扩展功能
举例介绍:在动物类中 马 狗 猪 猴子都有名字 都睡觉 都吃饭 这是共性内容,把这些定义在父类中。在日后,猴子有了爬树的功能,而这就是定义在接口中。

接口的成员特点


1:成员变量的特点:接口没有成员变量,只有公有的.静态的常量
接口会有默认值(public static final)常量名=常量值
2:接口成员方法特点
(JDK7及以前)公有的,抽象方法:
public sbstract 返回值类型 方法名();
(JDK8以后)可以有默认方法和静态方法:
默认 public default 返回值类型 方法名(){}
静态 static 返回值类型 方法名(){}
(JDK9以后)可以有私有方法:
private 返回值类型 方法名(){}
3:接口构造方法的特点:
接口不能实例化,也没有初始化的成员所以没有构造方法

更多的关于接口和抽象类的内容可以去界面抽象类,接口基础讲解

六:IO流

I:input指的是对硬盘读操作

O:output指的是对硬盘的写操作

IO流的分类

第一种分类:则是上面介绍的输入(I)输出(O)流:读写操作

第二种分类:根据读取数据的方式不同

                字节流:指的是读取数据的多少,字节流每一次读取一个字节也就是8个二进制位,但是这种流读取的文件是万能的,就是什么类型的文件都可以读取,例如:文本文件,图片,声音文件,视频文件等。

读取demo.txt中的文字内容,文档中是以下的内容:m不想睡醒的梦

第一次读取:“a”

第二次读取:文字”不“得前8个二进制位

第三次读取:文字”不“得后8个二进制位

                字符流:一次读取只能读取一个字符,"a"是一个字符,"不"也是一个字符,但是它得读取文件类型则不是万能的了,只能读取普通文本文件(.java、.ini、.py .txt),不能读取图片视频声音等文件。

读取demo.txt中的文字内容,文档中是以下的内容:m不想睡醒的梦

第一次读取:“a”

第二次读取:”不"

第三次读取:"想"

FileInputStream

“万能”读取数据流

这里要读取的文件demo1.txt内容是:abcdefghc

案例:读取文本内容

方法一:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Fileinputstream {
    public static void main(String[] args) throws IOException {
        FileInputStream file = null;
        try {
            file = new FileInputStream("C:/Users/lenovo/Desktop/demo1.txt");
//            System.out.println(file.read());  //read()方法返回的则是文件第一个字节的ACILL值
            byte[] bytes = new byte[4];       //通过数组的方式去读取数据,数组的长度则实现每一次读取字节的长度
            int readcount = 0;
//          file.read(bytes);
//            for(byte y : bytes){
//                System.out.println(y);       //
//            }
            while ((readcount = file.read(bytes)) != -1){
                System.out.println(new String(bytes,0,readcount));    //通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。


            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if (file !=null){
                file.close();
            }
        }
    }
}

输出结果:一次只读取数组长度的内容模块

方法二:
import java.io.FileInputStream;
import java.io.IOException;

public class Fileinputstram_02 {
    public static void main(String[] args) throws IOException {
            FileInputStream file = null;
        try {
            file = new FileInputStream("C:/Users/lenovo/Desktop/demo1.txt");
//            System.out.println("查看读取该文件的总字节数:"+file.available()); //通俗的来讲就是这个文件在内存中占了多少个字节
//            int num1=file.read();
//            System.out.println(num1);
//            System.out.println("查看还有多少个字节没有读:"+file.available());

            byte[] bytes = new byte[file.available()];
            file.read(bytes);
            System.out.println(new String(bytes));    //控制台进行输出:abdefgh

            //跳过几个字节的内容再开始读取内容
            file.skip(1);
            System.out.println(file.read());         //控制台进行输出:98 跳过97这一个字节

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        finally {
            if(file != null){
                file.close();
            }
        }
    }
}

 七:Socket类与ServerSocket

Socket类实现的是不同计算机进行字节流的传递,可以这样的理解Socket实现的是不同计算机通过端口号实现内容的传递,

ServerSocket则是在客户/服务器通信模式中,服务器通过创建监听端口的ServerSocket,它负责接收客户端发送的连接请求,生成服务器与客户端连接需要的Socket。

案例:通过代码简单的模拟客户端与服务器信息的交互

客户端代码(附带详细的解释)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Socket_client {
    //服务器的端口号和ip地址
    public static final int port =8080;
    public static final String host = "localhost";

    public static void main(String[] args) throws IOException {
        System.out.println("client is starting.....");
        while(true) {
            Socket socket = null;
            try {
                //连接服务器
                socket = new Socket(host, port);
                //读取服务器所传递出来的信息
                BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //向服务器传递信息
                PrintStream out = new PrintStream(socket.getOutputStream());
                System.out.println("请输入 \t");
                //将客户端输入的数据发送到服务器中
                String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
                out.println(str);
                //接收服务器所传递输出来的数据,并打印出来
                String ret = input.readLine();
                System.out.println("服务器返回的数据是:" + ret);
                
                //判断是否关闭此次连接
                if ("ok".equals(ret)) {
                    System.out.println("客户端关闭连接");
                    Thread.sleep(500);
                    break;
                }
                out.close();
                input.close();
            } catch (Exception e) {
                System.out.println("客户端异常:" + e.getMessage());
            } finally {
                if (socket != null) {
                    socket.close();
                }
            }
        }
    }
}

服务器代码(附带详细的解释)



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static final int port = 8080;//监听的端口号

    public static void main(String[] args) {
        System.out.println("Server is starting...\n");
        Server server = new Server();
        server.init();
    }

    public void init() {
        try {
            //创建一个ServerSocket,这里可以指定连接请求的队列长度
            //new ServerSocket(port,3);意味着当队列中有3个连接请求是,如果Client再请求连接,就会被Server拒绝
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
                //从请求队列中取出一个连接
                Socket client = serverSocket.accept();
                // 处理这次连接
                new HandlerThread(client);
            }
        } catch (Exception e) {
            System.out.println("服务器异常: " + e.getMessage());
        }
    }
    //通过线程来实现内容的接收和发送
    private class HandlerThread implements Runnable {
        private Socket socket;
        public HandlerThread(Socket client) {
            socket = client;
            new Thread(this).start();
        }

        public void run() {
            try {
                // 读取客户端数据
                BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String clientInputStr = input.readLine();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException
                // 处理客户端数据
                System.out.println("客户端发过来的内容:" + clientInputStr);

                // 向客户端回复信息
                PrintStream out = new PrintStream(socket.getOutputStream());
                System.out.print("请输入:\t");
                // 发送键盘输入的一行
                String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
                out.println(s);

                out.close();
                input.close();
            } catch (Exception e) {
                System.out.println("服务器 run 异常: " + e.getMessage());
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (Exception e) {
                        socket = null;
                        System.out.println("服务端 finally 异常:" + e.getMessage());
                    }
                }
            }
        }
    }
}

结果测试

客户端向服务器传递数据1

服务器接收到客户端传递的数据,并回复一个2

客户端接收到数据2,并回复ok,结束此次连接

服务器向客户端传递ok表示连接的结束

通信成功

内容会持续更新,感兴趣的话,不妨留个关注。

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

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

相关文章

极坐标系下的交换积分次序

极坐标系下的交换积分次序 我把极坐标系下的交换积分次序总结为动静与静动之间的转换,下面通过一个例子感受一下 ρ 1 、 ρ 1 cos ⁡ θ \rho1、\rho1\cos\theta ρ1、ρ1cosθ ∫ 0 π / 2 d θ ∫ 1 1 cos ⁡ θ f ( ρ cos ⁡ θ , ρ sin ⁡ θ ) ρ d…

openAI发布基于ChatGPT的AI绘画模型DALL·E3,话说stable-diffusion还香吗?

前期的文章,我们介绍过stable-diffusion的相关操作,stable diffusion模型是Stability AI开源的一个text-to-image的扩散模型,其模型在速度与质量上面有了质的突破,玩家们可以在自己消费级GPU上面来运行此模型,本模型基…

2023年能跨平台同步的笔记软件

对于当今的职场人士来说,记录和管理大量的信息已经成为了日常工作中不可或缺的一部分。无论是会议笔记、读书笔记、重要工作任务还是工作注意事项,如何高效地记录和管理这些内容,成为了职场人士关注的焦点。 如何记录这些笔记内容更加简单方…

定时器的基本原理和应用

题目背景 利用51单片机的定时/计数器T0的模式1实现间隔定时,每隔1秒L1指示灯闪烁一下,也就是亮0.5秒,熄灭0.5秒;每隔10秒L8指示灯闪烁一下,也就是也就是亮5秒,熄灭5秒。 分析 计数初值。 定时/计数器&…

《C++ Primer》第5章 语句

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 5.1 简单语句(P154) 在一个表达式的末尾加上 ; 就构成了表达式语句,其作用是执行表达式并丢弃结果。 空语句 由单独的 ; 构成的语句为空语句。空语句常用于语法上需要一…

Nuget 镜像源地址过期,腾旭镜像源地址替换

Nuget过期 国内镜像源地址ssl认证过期了。Nuget无法搜索,一直还原报错 解决方法,替换腾旭镜像源地址 tencent_mirrors https://mirrors.cloud.tencent.com/nuget/

婴幼儿腹泻的原因与应对

引言: 腹泻是婴幼儿常见的健康问题之一,尤其在早期生活阶段,由于他们的消化系统尚未完全发育,容易受到各种因素的影响。腹泻不仅给婴幼儿带来不适,还可能导致脱水和营养不良。因此,了解婴幼儿腹泻的原因是…

【LeetCode刷题笔记】排序

905. 按奇偶排序数组 解题思路: 1)额外数组 两次遍历,第一遍将所有的 偶数 放到结果数组 res 的前面,第二遍将所有的 奇数 接着放到结果数组 res 的后面。也可以使用 对撞指针 往结果数组里存,在 一次遍历 内搞定。 2…

Ubuntu20.04 配置 yolov5_ros 功能包记录

文章目录 本文参考自博主源801,结合自己踩坑后修改 项目地址:https://github.com/mats-robotics/yolov5_ros 1.新建工作空间 新建一个工作空间 yolo_ros(名字可自定义),在 yolo_ros 下新建文件夹 src 并catkin_make进行编译 2. 安装相机驱动,可以选用较为主流的 usb_cam 或…

2024年杭州电子科技大学工商管理硕士/工程管理硕士联考网报指南

2024年MBA/MEM考试网上报名流程网报时间根据《2024年全国硕士研究生招生工作管理规定》要求,研招统考网上正式报名时间为2023年10月8日至10月25日,每天9:00—22:00。网上预报名时间为2023年9月24日至9月27日,每天9:00—22:00(报名…

S5PV210裸机(四):按键中断

本文主要探讨轮询按键和中断安按键的相关知识。 按键 无按下,GPIO引脚处高电平,电路断开 按下,GPIO引脚接低电平,电路导通 SoC内部通过检测GPIO电平高低判断按键作为SoC的输入信号 按键响应 轮询…

IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案

一 背景 汽车ADAS技术是当下国内外的重点研究方向,且ADAS的发展水平和市场竞争力紧密相关,因此一套完善的ADAS测试方案对各整车厂而言非常重要。然而,国内ADAS测试却面临着很多阻碍,主要原因在于:相关测试设备昂贵&am…

关于LinkedBlockingQueue的offer的正确用法,如何保证阻塞

我们在做一些并发操作时,常常会使用到LinkedBlockingQueue 也会使用offer方法来往队列中插入数据 我们一直觉得使用offer后,当队列满了,新增加的元素会阻塞插入线程,然后一直等待到队列有空间后再插入。然而测试后发现并不是这样。…

7. Java本项目知识基础---上篇

Java本项目知识快速入门 1. idea项目打开、关闭、复制 正常关闭: 正常打开: 正常复制: 2. idea快捷键 保存:ctrls 撤销:ctrlz 还原:ctrlshiftz 复制:ctrlc 粘贴:ctrlv 快速复制粘贴:ctrld 删除行:c…

MySQL MVCC多版本并发控制机制原理详解

目录 一、前言二、MVCC解决了什么问题三、MVCC核心 Undo Log 和 Read View 介绍3.1、Undo Log(日志版本链)3.2、Read View(一致性视图)3.2.1、设计思路3.2.2、ReadView判断规则 四、数据准备五、举例探究MVCC机制5.1、例子执行流程…

直流负载箱的维护和保养方法有哪些?

直流负载箱的维护和保养方法主要包括以下几个方面: 日常要定期清洁负载箱的外壳和散热器,确保散热良好,避免灰尘积累影响散热效果。还要定期检查负载箱的连接器,确保连接良好,避免接触不良或松动导致故障。根据使用要求…

信创之国产浪潮电脑+统信UOS操作系统体验3:使用 visual studio code搭建Python开发环境

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿原来在windows下开发python程序,要么使用python自带的IDLE,要么使用pycharm,IDLE用来开发很不方便,而pycharm对开发支持比较好,换成…

我做了一个简易P图(参数图)分析软件

P图(即参数图,Parameter Diagram),是一个结构化的工具,帮助大家对产品更好地进行分析。 典型P图格式 P图最好是和FMEA软件联动起来,如国可工软的FMEA软件有P图分析这个功能。 单纯的P图分析软件很少,为了方便做P图分…

vue-1

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架 …

检验样品数量

声明 本文是学习GB-T 586-2015 船用法兰铸钢止回阀. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 4 要求 4.1 材料 止回阀的主要零件材料见表4。 表4 止回阀的主要零件材料 零 件 名 称 材 料 名 称 牌 号 标 准 编 号 阀体 阀体 铸钢 ZG275-485…