自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 wait()和notify()的使用

wait()和notify()方法都是Object方法,这两个方法都必须搭配synchronized使用。必须拿到相应的锁才能调用,否则抛出IllegalMonitorStateException。wait()方法痴汉方法。持有锁的线程调用wait()方法后会一直阻塞,直到有别的线程调用notify()将其唤醒。public class TestWait { public sta...

2019-08-02 10:55:45 219

原创 synchronized的实现原理以及JDK1.6之后的优化

synchronized的底层实现使用synchronized进行同步,关键就是对对象的监视器Monitor进行获取。这涉及到的是JVM层级别的monitorenter与monitorexit指令实现。在使用synchronized时必须保证锁定的对象是Object以及其子类对象。只有Object和它的子类才有对象监视器。执行同步代码块的时候需要执行一个monitorenter和多个...

2019-08-02 09:17:28 556

原创 synchronized的两种同步处理方式

锁是用来控制多个线程访问共享资源的方式。一般来说,一个锁能够防止多个线程同时访问共享资源。Java中使用synchronized来实现同步处理。同步:线程按照顺序一个一个进入方法中,不是同时进入。关于synchronized的两种同步处理方式:同步代码块 synchronized(this|Object及其子类对象|当前类.class){ //此处代码块在任意时刻只能有一个线程进入...

2019-07-31 21:57:32 480

原创 线程停止的三种方式

线程停止的三种方式1. 设置标志位(无法处理线程阻塞时的问题);2. 调用Thread类提供的stop方法强行关闭线程;3. 通过Thread类提供的interrupt方法举例:设置标志位class InterruptThread extends Thread{ private boolean flag = true; public void setFlag(boole...

2019-07-17 19:55:13 495

原创 Java多线程实现的三种方式

Java多线程实现的三种方式继承Thread类,然后覆写run方法;实现Runnable接口,而后覆写run方法;实现Callable接口,而后覆写call<V>方法。1. 继承Thread类start() :是用来启动线程,是多线程启动的唯一方式。由创建到就绪,这个线程是否被运行是由系统调度所决定的。run()方法不由用户调度。那么,为什么线程启动时,为什么不直接...

2019-07-15 21:08:15 95

原创 Java中启动线程为什么调用start()方法?

Java中启动一个线程为何调用start()方法而不是run()方法?那么首先看一个例子:class MyThread extends Thread{ @Override public void run() { System.out.println("直接继承Thread"); }}public class Test { public sta...

2019-07-15 19:52:05 1521

原创 字符输出流和字符输入流

字符输出流和输入流字符输出流字符输入流字节流和字符流操作的本质区别只有一个:字节流是原生的操作,而字符流是经过处理后的操作。在进行网络数据传输、磁盘数据保存所支持的数据类型只有字节。字符输出流字符更加适合去处理中文数据,Writer是字符输出流的处理类。这个类定义如下:public abstract class Writer implements Appendable, Closeabl...

2019-06-23 17:11:25 2014

原创 字节输出流和字节输入流

字节输出流和输入流1. 字节输出流之前介绍的File文件操作类可以关联本地文件系统,实现文件的创建,删除和查询一些文件信息。但是File类不支持对文件内容进行操作,如果要处理文件内容,必须通过流的方式。流分为输入流和输出流。输入流:数据流入程序;输出流:数据从程序流出。在java.io包中,流分为两种:字节流和字符流。字节流:InputStream, OutputStream字符流...

2019-06-23 16:10:38 2366

原创 利用File类中的方法打印目录层级结构

利用File类中的方法打印目录层级结构第一步:首先了解File相关的使用方法;File类中提供了方法:判断是否是目录:public boolean isDirectory()列出当前目录下所有文件(文件和目录):public File[ ] listFiles()获取当前文件名称:public String getName()第二步:采用递归的思想,因为listFiles()方法只...

2019-06-18 18:02:11 526

原创 Java中File文件操作类

File文件操作类1. File类的使用2. 目录操作3. 文件信息1. File类的使用File:本地文件系统中的一个文件(文件和目录)。java.io.File类是一个普通的类,可以直接产生实例化对象。实例化对象用到两个构造方法:public File(String pathname);public File(String parent, String child); 设置父路...

2019-06-17 11:16:31 306

原创 反射与类的具体操作

反射与类之间的操作1. 获取父类信息2. 调用构造方法3. 反射调用普通方法4. 反射调用类中属性5. 总结1. 获取父类信息在Class类中提供了一些方法来获取父类信息,以下列举出三个:获取类的包名称:public Package getPackage()取得父类的Class对象:public native Class<? super T> getSuperclass()...

2019-06-13 23:55:08 428

原创 Java反射中Class对象获取方式

反射的基本使用1. 什么是反射2. Class类对象的三种获取方式3. 反射的应用简单工厂模式的应用1. 什么是反射反射:就是对象的反向处理。那么正的的操作是什么?当我们实例化一个对象,首先要创建一个类,new一个它的构造方法,就能实例化一个对象。它的处理流程就是:包名.类名;通过包名,在找到类名。反射中的“反”:就是根据对象来取得对象的来源信息。而这个反的的操作核心取决于Object的一...

2019-06-12 16:34:47 389

原创 Java新特性之Lambda表达式和内建函数使用

1. Lambda表达式的使用Lambda是JDK1.8推出的重要新特性,使用函数式编程。函数式编程和面向对象编程可以理解为两大开发阵营。面向对象最大的局限在于:结构必须完整。比如:在写一个main方法,必须创建一个包,写一个类,定义一个main方法,然后在写输出语句。举例:传统面向对象开发public interface IMessage { void print();}...

2019-06-11 16:45:59 213

原创 Java新特性之方法引用

方法引用的使用最初,引用只是针对引用类型完成的,也就是只有数组、类、接口才具备引用操作。JDK1.8后追加了方法引用。实际上引用的本质就是别名。因此方法的引用就是别名的使用。方法的引用有四种形式:引用静态方法: 类名称:: static方法名称;引用某个对象的方法:实例化对象::普通方法;引用某个特定类的方法:类名称::普通方法;引用构造方法:类名称::new。方法的引用是...

2019-06-11 11:21:35 5221 3

原创 Java新特性接口的加强

接口的加强JDK1.8之前的接口定义:接口就是抽象方法和去全局常量的集合;接口中定义的方法是抽象方法,默认是public abstract修饰;在接口中定义的变量,其实是一个常量,并且是public static final修饰。如果现在有一个需要,需要在接口中增加一个新的功能,而它的子类有3W个,那么就要重复粘贴3W次。造成该问题的原因是:因为接口只是一个方法的声明,而没有具体...

2019-06-09 23:40:38 166

原创 Java新特性枚举的使用

枚举的使用1. 枚举的引出2. Enum类3. 定义结构4. 枚举类的应用1. 枚举的引出在多例模式的使用中,我们知道构造方法私有化,类内部需要提供若干个实例化对象,后面通过static返回。举例:定义一个描述颜色的多例类。public class Color { private final static int RED_NUM = 1; private final sta...

2019-06-02 23:16:53 264

原创 类型擦除的简单理解

泛型是JDK1.5引进的。

2019-06-01 11:07:41 5688

原创 通配符和泛型接口简单使用

通配符和泛型接口1. 通配符的引出1.2. 泛型上限1.3. 泛型下限2. 泛型接口1. 通配符的引出在程序中追加了泛型之后,可以避免ClassCastException 的问题,但是又会产生新的情况:参数的统一的问题。举例:方法中的参数类型与接收到的参数类型不匹配public class TestMessage{ public static void main(String[]...

2019-05-31 23:01:10 260

原创 Java中泛型的基本使用

泛型的使用1.泛型的引入1.泛型的引入JDK1.5后引入泛型。假如需要定义一个描述坐标的程序类Point,需要提供两个属性x,y。对于这两个属性的内容可能有如下选择:x = 10, y = 20x = 10.1, y = 20.1x = 东经80度, y = 北纬20度因为Point中的x, y 属性有多种类型,所以采用Object去接收。举例:定义一个Point类/...

2019-05-30 23:55:17 237

原创 JDK1.5新特性(可变参数和foreach)

JDK1.5新特性1. 可变参数2. foreach(增强for循环)1. 可变参数假如有这样一个需求,用于计算任意参数的整数相加的结果。这个需求在早期是用数组的方法来实现。举例:早期实现方式(利用数组进行求和)public class Test1{ public static void main(String[] args) { //所有的参数,包装成int[]数组,...

2019-05-29 09:38:31 179

原创 Java的异常体系

1.异常体系几乎所有的代码都会出现异常,为了保证程序在出现异常后可以正常执行完毕,最大化的减少损失的一种保护手段。Java中异常也是类。异常类继承关系:只有Throwable以及其子类能够进行异常捕获与处理。Error: 描述JVM运行时内部错误,栈溢出,堆溢出;Exception: 程序中普遍存在的,由于代码问题产生的;IOException: 由于输入输出产生的异常 ...

2019-05-28 23:43:22 144

原创 String类的常用方法

String类的常用方法1. 字符与字符串1. 字符与字符串char < - > Stringchar[ ] - --> Stringpublic String(char[ ] value):将字符数组全部转换为字符串public String(char[ ] value, int offset, int len):将字符数组的部分内容转换为字符串...

2019-05-28 22:06:50 2716

原创 Object的方法使用

Object方法使用1. Object的方法1.1 public String toString() {} :获取对象信息1.2.public boolean equals(Object obj){} :对象比较2.接受所有引用型数据类型3.包装类Integer比较1. Object的方法Object:所有类的父类,可以接受所有类的对象1.1 public String toString()...

2019-04-26 23:00:30 423

原创 Java中String类详细描述

Java中String类详细描述1.String类的实例化方式2. String字符串比较3. String的匿名对象(没起名字的对象)4. 实例化区别5. 字符串不可变更1.String类的实例化方式直接赋值 String str = "hello world"; //str是一个对象的引用,所以“hello world”应该保存在堆内存中 System.out.println(s...

2019-04-11 21:01:59 291

原创 IDEA的性能优化

1. IDEA 的运行环境IDEA 是用Java语言开发的IDEA 运行在JRE上(但是它本身自带JRE)它可以跨平台(Window, Linux, MacOS)2. IDEA 的性能优化选择电脑IDEA安装目录的bin目录,如:D:\IntelliJ IDEA 2018.1\bin;如果是选择的是64位安装的,则打开idea64.exe.vmoptions;如果选择的是32位...

2019-03-24 22:44:29 3606

原创 工厂设计模式

1. 工厂设计模式举例:某天,某同学去买电脑,一款电脑是Mac,一款是Lenovointerface Computer{ void printComputer();}class MacComputer implements Computer{ @Override public void printComputer() { System.out.pr...

2019-03-17 23:16:18 145

原创 Java抽象类与接口

1.抽象类的定义和使用1.1 抽象类的定义和使用定义:抽象类只是在普通类的基础上扩充了一些抽象方法(只声明而未实现的方法)抽象类和抽象方法都要用abstract关键字来定义抽象类使用原则:1.所有的抽象类必须有子类2.抽象类的子类必须覆写所有的抽象方法(子类不是抽象类)3.抽象类的对象可以通过对象多态性利用子类为其初始化4.private与abstract不能同时使用举例:...

2019-03-16 18:33:27 128

原创 模板设计模式

模板设计模式开闭原则(OCP):一个软件实体如类、模块和函数应该对扩展开放、对修改关闭模板设计模式是抽象类的一个实际应用场景咖啡冲泡法:1.将水煮沸2.用沸水冲泡咖啡3.将咖啡倒进杯子4.加糖和牛奶茶冲泡法:1.将水煮沸2.用沸水浸泡茶叶3.把茶倒进杯子4.加柠檬举例:用代码实现咖啡和茶的类1.冲泡咖啡类class Coffee{ public final vo...

2019-03-14 21:58:41 121

原创 Java类与对象(三)

Java类与对象(三)1. 继承的定义与使用1.1 继承的实现1. 继承的定义与使用继承的作用:在已有基础上进行功能的扩充,提高代码的复用性关键字:extends子类也被成为派生类,父类也被称为超类(Super Class)1.1 继承的实现继承语法:class 子类 extends 父类举例:一个简单的继承实现...

2019-03-09 22:04:09 98

原创 Java类与对象(二)

@TOC1. 代码块普通代码块构造块静态块同步代码块(与线程相关)1.1 普通代码块定义在方法中的代码块代码中的变量,只在当前块中有效一般代码较长,是为了防止变量名不重名,使用该块public class Test{ public static void main(String[] args){ { int x = 10; System.out.pri...

2019-03-08 09:12:51 166

原创 Java类与对象概述(一)

文章目录1. 面向对象特征(三大基本特征)2. 类与对象的定义与使用2.1 基本概念2.2 定义和使用2.3 对象内存分析3. 封装和构造方法3.1 用private实现封装1. 面向对象特征(三大基本特征)面向对象最大特征:对现实生活可以进行抽象。举个简单的例子,把一个大象关进冰箱里,对于面向过程而言,首先把冰箱门打开,其次把大象放进去,最后关上冰箱门;但面向对象始终关心的是大象这个实体...

2019-03-04 20:17:00 190

原创 Java数据与运算符

Java数据类型与运算符1.Java数据类型划分1.1 整形1.1.1 int1.1.2 byte1.2 浮点型1.2.1 double1.2.2 float1.3 char1.4 布尔型1.5 String 类2.Java 运算符2.1 基本运算符2.2 三目运算符2.3 关系运算符2.4 逻辑运算符新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂...

2019-02-19 19:50:00 490

原创 模拟实现一些简单库函数

模拟实现一些简单的库函数strlenstrcpystrcatstrcmpstrstrmemcpymemmovestrlen的模拟实现strlen是用来求字符串长度,从首字符开始数,一直到'\0'才停下。#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;...

2018-07-30 21:09:27 147 1

原创 三子棋小游戏C语言

设计三子棋思路首先写main函数,无论游戏开始还是退出,都先要打印一个菜单,所以写一个菜单函数menu();然后根据菜单选择游戏开始和退出了,如果选择玩游戏,那么就执行游戏函数game(),否则就退出。对于game()函数中,首先要打印一个棋盘,用一个二维数组;第二步就是玩家下棋;第三步电脑下棋;每一步下棋都要判断输赢。然后一直循环,直到有一方赢,或者平局退出。对于下棋的结果,有3中情况...

2018-07-04 22:38:21 339

原创 写函数实现strcpy和strlen

实现strcpy调用库函数实现#iinclude &amp;lt;string.h&amp;gt;int main(){ char arr[20]; strcpy(arr, &quot;i love you!); //把原字符串copy到目标串中 printf(&quot;%s\n&quot;, arr); system(&quot;pause&quot;); return 0;}自

2018-07-03 22:48:41 708

原创 C语言基本操作符

算术操作符+ - * / %+ - * / 用于整数和浮点数运算% 只用于整数运算移位操作符&amp;amp;lt;&amp;amp;lt; &amp;amp;gt;&amp;amp;gt;左移左边丢弃,右边补0原值不会被改变移n位,相当于乘2的n次方 右移算术右移右边丢弃,左边补齐符号位逻辑右移右边丢弃,左边补0位操作符赋值操作符复合赋值操作符单目操作符...

2018-07-02 19:22:35 563 2

原创 C语言冒泡排序

冒泡排序思想冒泡排序,就是相邻元素进行比较,比如:下图就是一趟冒泡排序,一趟把最大的数放在最后,下一趟把第二个最大的数字放在最后,依次比较下去。 详细代码#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;void bubble_sort(int arr[], int sz){ int i = 0; int ...

2018-06-28 18:00:08 159

原创 C语言数组概述

目录目录1.一维数组1.1数组的创建1.2数组的初始化1.3用指针访问数组2.二维数组2.1二维数组的创建2.2二维数组的初始化2.3指针访问二维数组3.有关数组的运算1.一维数组1.1数组的创建[ ]中必须是常量,不能是变量char arr[10]; float arr1[2];double arr2...

2018-06-28 13:34:56 176

原创 打印100~200之间的素数

要实现此要求,首先得了解素数是什么。素数:只有1和它本身两个因数。如果一个数能够整数2到它本身之间的数,说明它不是素数,如果都不能整除,说明不是素数。代码如下:int main(){ int i = 0; int count = 0; for (i = 100; i &lt;= 200; i++) { int j = 0; for (j = 2; j &lt; i; j++) ...

2018-06-07 11:48:27 499

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除