Java基础知识
Java基础知识总结
feng之锋
去互联网大厂搬砖!
展开
-
Java中的构造方法(构造函数)与普通方法区别
**Java中的构造方法(构造方法)与普通方法区别**一、明白什么是构造方法,什么是普通方法?所谓的构造方法,是一种特殊的方法,其作用是用来创建对象时初始化对象,即为对象成员变量赋初始值,总是与new运算符一起使用在创建对象的语句中。特别的,一个类是可以有多个构造函数,可以根据参数个数的不同或者参数类型的不同来区分它们,即为构造函数的重载。构造方法是类的一个特殊的成员,在类实例化时会自动调用,其构造方法定义格式如下:修饰符 方法名(){}其中需要注意的是:方法名与类名相同;没有返回值原创 2020-10-17 00:50:29 · 14922 阅读 · 11 评论 -
Java中 this关键字详解
客官如果大家喜欢我总结的知识点,请给我一个一键三连支持一下噢!原创 2020-10-18 00:48:54 · 1768 阅读 · 0 评论 -
Java中事件监听机制
Java中事件监听机制一、事件监听机制的定义要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如,在输入框中输入数据,点击按钮或者菜单,这些操作我们就称之为事件。事件监听机制,顾明思义,就是去监听事件有没有发生,类似于我们要监视一间房子里面会发生什么样的事情,就会给这座房子按上一个摄像头。对于这样的事件的处理,在Java中也有类似的机制。比如我们需要去监听一个按钮有没有被点击,就要给按钮上装上类似监视器的原创 2020-10-19 22:41:18 · 1405 阅读 · 0 评论 -
Java中的static关键字详解
**Java中的static关键字详解**在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法。调用一个静态方法就是 “类名.方法名” ,静态使用方法就是这么简单,举个例子,代码如下:package com.yf1010;import java.awt.FlowLayout;import java.awt.Graphics;import java.util.Date;import javax.swing.JButton;import javax.swi原创 2020-10-21 00:18:45 · 274 阅读 · 0 评论 -
Java中传参数--值传递和引用传递
**Java中传参数–值传递和引用传递**在Java中,传参数分为值传递和引用传递。在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数组、类和接口),是指通过类创建的对象的变量名字,这种类型在传递的时候就要遵守“引用传递”的规则;另一种是原始类型,即为8大基本类型(字节型(byte),短整形(short),整型(int),长整型(long),字符型(char),浮点型(float),双精度(double),布尔型(boolean)),这类型的原创 2020-10-21 16:09:26 · 634 阅读 · 1 评论 -
Java中图形界面重绘方法
**Java中图形界面重绘方法** 在我们编写图形界面程序的过程中,我们就会发现,当我们将窗体拉伸,缩小(或者最大化最小化)的时候,之前在窗体上画的图形会消失了。这是为什么呢? 1)原来,窗体包括其他的组件都是计算机绘制出来,我们一旦使得窗体发生改变,之前的一切都得重新绘制。但是,对于组件等有既定的重绘方法,对于我们所画的图形却没有重绘的方法。 2)也可以这样解释: 我们绘制图形的数据都存储在内存中,而整个窗体都是调用系统底层的绘图方法来绘制出来的。在创建窗体时我们已经定义了窗体的大小,如果原创 2020-10-22 13:43:24 · 2984 阅读 · 0 评论 -
Java中的实现马赛克效果以及灰度效果----整张图片
**Java中的实现马赛克效果-----整张图片**实现该效果的思路:我们知道图片是由一个一个的像素组成的,比如一张图片的分辨率为800 * 800,则它是由800个像素 * 800像素=640000像素组成的。我们要实现马赛克的效果,就是要局部区域像素用一个像素值来替代,换句话说,就是比如局部区域是10像素*10像素,在这些像素中,它们的值是不一样的,现在就像着能不能将该区域中的像素用一个像素的值来进行表示这段局部区域所有的像素值,这样我们就能过实现马赛克的一个效果了。先来看整体的代码,整体的代原创 2020-11-03 22:21:52 · 1107 阅读 · 0 评论 -
Java中实现图像的卷积效果
**Java中实现图像的卷积效果**图像的卷积: 指的是使用一个卷积核(kernel)对图像中的每一个像素进行一些列操作。卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是于原图像做运算的参数。卷积核通常是一个方形的网格结构,该区域上的每一个方格都有一个权重值,如下图,利用一个33的卷积核与图像上的相应大小的区域进行卷积运算,即对应相乘再相加,04 + 00 + 00 + 00 + 01 + 10 + 00 + 10 + 2(-4) = -8.Java中实现的效果:主类:pack原创 2020-11-05 21:57:11 · 1392 阅读 · 1 评论 -
Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作
**Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作**之前的那篇关于图像卷积的博客(Java中实现图像的卷积效果),只是讲了给定一张图片,从而实现图片的卷积操作;而现在,需要去实现通过实现点击窗口上的一个按钮,然后弹出对话框进行图片的选择,选择图片后就能够去实现图像的卷积操作了。一、效果图为:然后:最后实现的效果为:换一张图片的实现效果为:二、实现的代码部分为:主类:package com.yf1106;import java.awt.Button;impor原创 2020-11-06 22:04:48 · 591 阅读 · 2 评论 -
Java中的图像锐化操作
**Java中的图像的锐化操作**图像锐化的代码为:package com.yf1105;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import ja原创 2020-11-07 22:29:53 · 2328 阅读 · 5 评论 -
Java中山脉的绘制---递归方法
**Java中山脉的绘制—递归方法**山脉绘制的思路:给定两个点A(x1,y1),B(x2,y2),递归不断取中点,同时给定一个范围[-range,range]和一个比率rate。每次取中点后,这个中点的纵坐标的值加上这个范围内的随机值,同时通过range=range*rate来缩小这个变化的范围,最后,通过相邻的点连线,绘制成一个山脉的形状。整段代码如下:package com.yf1031;import java.awt.FlowLayout;import java.awt.Graph原创 2020-11-03 23:56:12 · 1173 阅读 · 1 评论 -
Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)
**Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)**本文的编程的思想:先将实现这六种效果的方法写入一个名为pic_performance的类,然后在监听器类Drawmouse类中通过pic_performance类去创建对象,然后利用该对象去调用里面相应的方法去实现相应的功能即可。先来看看代码吧。主类:package com.yf1111;import java.awt.FlowLayout;import java.awt.Gra原创 2020-11-14 00:26:04 · 1044 阅读 · 0 评论 -
Java编写飞机大战(超级详细的完整版)--附源码及图片
文章目录一、基本介绍二、源码分析三、总结一、基本介绍首先,先想想要完成一个飞机大战,需要完成那些步骤呢?①是不是需要有个界面去显示飞机和子弹之类的组件呢?这个时候是不是需要去绘制一个界面类呢? 答案是必须的!!!②既然画完了界面,那界面的上的飞机、子弹、敌机啥的是不是也需要创建一个类去绘制呢?答案也是必须的!!!在绘制子弹和敌机的时候,需要去考虑敌机遇到子弹爆炸的场景,以及每击毁一架飞机,怎么算我的得分的情况,这些都是需要去考虑的。二、源码分析①先绘制飞机大战的界面类GameMain类原创 2020-12-04 10:26:45 · 34357 阅读 · 22 评论 -
java集合框架史上最详解(list set 以及map)
title: Java集合框架史上最详解(list set 以及map)date: 2020-12-13 11:09:39tags: 集合框架 list set map文章目录一、集合框架总体架构1.1 集合框架在被设计时需满足的目标1.2 所有的集合框架需要包含的内容1.3 Java集合框架图1.4 常用的集合在系统中的区别二、主要分析一下Set、List以及Map三个接口以及实现它们类的方法2.1 Set接口及其实现类方法2.1.1 Set接口a.HashSet中存放null值b.HashSe.原创 2020-12-13 21:09:54 · 574 阅读 · 0 评论 -
位映射--解决大数据排序与排重问题
文章目录一、问题提出二、问题分析三、位映射的详细阐述四、将int[] 数组转化为byte[] 数组方案4.1 实现bit索引与int数值之间的映射关系4.2 计算转化为byte[]数组的索引4.3 计算bitIndex在byte[]数组索引index中的具体位置4.4 引入位运算将byte[] 数组索引index 的各个位按权值相加五、读取byte[] 数组以及对其排序5.1 读取byte[]数组5.2 完整源码一、问题提出M(比如有10亿)个int整数,只有其中N个数重复出现过,读取至内存中并将重复的原创 2020-12-12 14:43:02 · 720 阅读 · 0 评论 -
一文教会你什么线程安全以及如何实现线程安全
title: 一文教会你什么线程安全以及如何实现线程安全tags: 线程安全 Java并发 Java内存模型 synchronized volatile Lock文章目录一、线程安全的概念二、导致线程不安全的原因三、线程安全问题3.1 原子性3.2 可见性3.3 有序性案例:抢票四、如何确保线程安全?4.1 synchronized关键字4.1.1 同步代码块4.1.2 同步函数4.1.3 多线程死锁线程4.2 Lock4.3 volatile关键字解决办法:4.4 synchronized、vol.原创 2020-12-16 13:59:49 · 2636 阅读 · 6 评论 -
生产者/消费者模型详解(基于Java)
title: 生产者消费者模型tags: 多线程 synchronized 锁 wait() notify()生产者/消费者模型原理以及代码实现一、生产者/消费者模型原理所谓的生产者消费者模型,是通过一个容器来接解决生产者和消费者的强耦合的问题。通俗地将,就是生产者在不断地生产,而消费者在不断地消费,可是生产者不可能一直生产,因为用来装生产者生产的东西的容器容易装满,而此时,生产者就不能够一直去生产,消费者此时就可以从该容器中消费该产品,但是呢,容器中的东西也终会被消耗殆尽的一刻的,在这一刻呢,.原创 2020-12-19 14:47:32 · 436 阅读 · 1 评论 -
基于链表实现队列(基于Java实现)
title: 基于链表实现队列(基于Java实现)tags: 链表 队列基于链表的队列实现方法的原理:基于链表的实现,跟前面的基于数组实现一样,同样也需要两个指针:head指针和tail指针。它们分别指向链表的第一个结点和最后一个结点。如下图所示,入队时,tail->next = new_node,tail = tail->next; 出队时,head = head->next。具体代码如下:package com.company;//基于链表实现队列public .原创 2020-12-14 21:20:05 · 438 阅读 · 1 评论 -
基于数组实现队列(基于Java实现)
title: 基于数组实现队列(基于Java)tags: 数组 队列基于数组实现队列的原理:基于数组实现的队列,使用两个指针,一个是head指针 ,指向的是队头;一个是tail指针,指向队尾。可以通过下面这张图片来进行理解,当a,b,c,d依次入队之后,队列中的head指针指向下标为0的位置,而tail指针指向的是下标为4的位置。当需要入队操作时,先进行判断一下该队列是否已满,判断的条件为:tail等于队列的长度n。如果队列已满,就返回fasle,否则,进行入队操作,同时tail进行自加,往后退一.原创 2020-12-14 12:33:06 · 282 阅读 · 1 评论 -
基于数组实现循环队列(基于Java实现)
title: 基于数组实现循环队列(基于Java实现)tags: 数组 循环队列基于数组实现循环队列的方法原理:我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一来入队操作的性能就会受到影响。那我们可以使用循环队列来解决这一问题。循环队列,顾名思义,它长得像一个环。如下图所示:我们可以看到,图中这个队列的大小为 8,当前 head=4,tail=7。当有一个新的元素 a 入队时,我们放入下标为 7 的位置。但这个时候,我们并不把 tail 更新为 8,而是将.原创 2020-12-14 21:23:17 · 405 阅读 · 0 评论 -
希尔排序算法(基于Java实现)
title: 希尔排序算法(基于Java实现)tags: 希尔排序算法希尔排序算法的原理与代码实现:一、希尔排序算法的原理因为在简单插入排序中可能会存在这样的问题,例如,我们将数组arr=[2, 3, 4, 5, 6, 1]进行排序,如果我们采用的是简单直接插入排序算法,就会发现最后一位的数字1需要移动的次数就是arr.length - 1次。这样明显就会降低排序的效率。因此,希尔排序就是为了解决这样的问题,提高直接插入排序算法的效率,应运而生的。希尔排序的原理:希尔排序也是一种插入排序,它.原创 2020-12-26 10:30:46 · 195 阅读 · 0 评论 -
插入排序算法(基于Java实现)
title: 插入排序算法(基于Java实现)tags: 插入算法插入排序算法原理及代码实现:一、插入排序算法的原理首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。如图所示,要排序的数据是 4,5,6,1,3,2,其中左侧为已排序区间,右侧是未排序区间。插入排序也包.原创 2020-12-23 11:07:02 · 3426 阅读 · 1 评论 -
归并排序算法(基于Java实现)
title: 归并排序算法(基于Java实现)tags: 归并算法归并排序算法的原理与代码实现:一、归并排序算法的原理其核心思想其实蛮简单的,就是如果我们要排序一个数组,我们先数组从中间分成前后两部分,然后对前后两部分分别排序,然后再将排好序的两部分合并在一起,这样整个数组就都有序了。总而言之,归并排序使用的就是分治思想,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。而分治算法一般都是用递归来实现的,分而治之是一种解决问题的处理思想,递归则是一种.原创 2020-12-22 10:00:00 · 248 阅读 · 1 评论 -
基数排序算法(基于Java实现)
title: 基数排序算法(基于Java实现)tags: 基数算法基数排序算法原理及代码实现:一、基数排序算法的原理基数排序属于“分配式排序”,又称“桶子法”。顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,最终达到排序的作用。基数排序的基本思想: 将所有带比较的数值统一为同样的数位长度,数位较短的数前面补零。然后从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成了一个有序序列。举例说明:第一轮排序的时候,是将每个元素的个位数取出.原创 2020-12-24 15:21:54 · 177 阅读 · 0 评论 -
冒泡排序算法(基于Java实现)
title: 冒泡排序算法(基于Java实现)tags: 冒泡排序算法冒泡算法原理及代码实现:一、冒泡算法的原理冒泡算法只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。这样一来,一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。例如,我们要对一组数据4,5,6,3,2,1从小到大进行排序。第一次的冒泡操作的详细过程就是这样:可以看出,经过一次冒泡操作之后,6个元素已经存储在正确的位置上。要想.原创 2020-12-23 11:21:54 · 6768 阅读 · 5 评论 -
选择排序算法(基于Java实现)
title: 选择排序算法(基于Java实现)tags: 选择算法选择排序算法原理及代码实现:一、选择排序算法的原理选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。二、选择排序算法的代码实现package com.company;import java.util.Arrays;public class SelectionSort { public static int[] sel.原创 2020-12-23 11:17:13 · 254 阅读 · 3 评论 -
Java中的I/O模型总结(八股文自述)
Java中的I/O模型BIO: 是指应用程序在执行 I/O 操作后,如果没有获得响应,就会阻塞当前线程,不能执行其他任务。同步阻塞 I/O 模式,数据的读取写⼊必须阻塞在⼀个线程内等待其完成。在活动连接数不是特别⾼(⼩于单机 1000)的情况下,这种模型是⽐较不错的,可以让每⼀个连接专注于⾃⼰的 I/O 并且编程模型简单,也不⽤过多考虑系统的过载、限流等问题。线程池本身就是⼀个天然的漏⽃,可以缓冲⼀些系统处理不了的连接或请求。但是,当⾯对⼗万甚⾄百万级连接的时候,传统的 BIO 模型是⽆能为⼒的。因此原创 2021-04-08 17:23:44 · 375 阅读 · 0 评论 -
把一个数组的值存入二叉树中,然后利用前序、中序、后序3种方式进行遍历(完整代码以及运行结果)(Java)
把一个数组的值存入二叉树中,然后利用前序、中序、后序3种方式进行遍历(完整代码以及运行结果)在最近的面试过程中,听说有小伙伴被面试官要求创建二叉树,然后对该二叉树进行遍历,感觉这一直以来都是一个大家不太注意的点,因为大家平时刷算法题,都是在leetcode或者牛客网上刷的,都是直接写关键代码,对于如何去创建一个二叉树,然后将数组中的值导入进去,一直以来是难题,故今天来记录一下,如何创建一个二叉树,然后利用该二叉树去遍历或者做一些其他的操作。代码如下:package TreeNode;impor原创 2021-04-03 00:33:14 · 732 阅读 · 0 评论 -
Java中的多线程编程(超详细总结)
**Java中的多线程编程(超详细总结)**一、线程与多线程的概念线程,即单线程,是程序的一条执行线索,执行路径,是程序使用cpu的最小单位。线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的。多线程,从字面上理解,就是从多个单线程一起执行多个任务。在Java 编程中,已经给多线程编程提供了内置的支持。多线程是多任务的一种特别的形式,但多线程使用了更小的cpu资源开销。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。二、线程与进程之间的关系进程: 一个进程包括由操原创 2020-11-21 00:54:28 · 2853 阅读 · 0 评论 -
Java多线程编写简易飞机大战(一)
**Java多线程编写简易飞机大战(一)**利用多线程编写飞机大战,主要有3个关键:①继承Thread类,重写run方法;②线程工作代码在run方法中写;③启动时,调用线程对象的start()方法。现在来编写一个简易飞机大战程序,实现在界面上能够发射一系列的子弹的功能。代码如下:主类,其主要的功能:创建界面,并将界面画出来。package com.yf1117; import javax.swing.JButton;import javax.swing.JFrame;//编译格原创 2020-11-22 00:12:55 · 608 阅读 · 0 评论 -
两种单例模式总结--(饿汉式、懒汉式)(java代码)
两种单例模式总结–(饿汉式、懒汉式)一、饿汉式单例模式代码实现:public class Singleton{ private static final Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance() { return singleton; }}二、懒汉式单例模式原创 2021-08-28 21:47:46 · 778 阅读 · 0 评论