JAVA基础
Zero-place
在校大学生正在追赶互联网大潮!
展开
-
JAVA基础:String、StringBuffer、StringBuilder全面分析
三者就使用层面的简略分析:三者就字符串拼接方面运行速度快慢为:StringBuilder > StringBuffer > String。线程安全上:StringBuilder是线程不安全的,而StringBuffer是线程安全的,原因StringBuffer中使用了很多synchronized。小结:(1)如果要操作少量的数据用 String;(2)多线程操作字符串缓冲区下操...原创 2019-11-17 23:17:49 · 133 阅读 · 0 评论 -
java静态代码块、静态方法、静态变量、构造代码块、普通代码块
一、静态代码块 1.在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:public class CodeBlock{ static{ System.out.println("静态代码块"); } } 2.执行时机 静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函...转载 2019-10-16 22:15:34 · 135 阅读 · 0 评论 -
JAVA内存分析以及程序运行过程(堆、栈、方法区)
方法区(又叫静态区)特点如下:1.JVM只有1个方法区,被所有线程共享!2.方法区也是堆,只是用于存储类、常量相关的信息!3.用来存放程序中永远是不变或唯一的内容。(类信息(代码)、Class对象、静态变量、静态方法、字符串常量、JIT(即时编译器)处理后的数据等)过程详解:在JVM完成一系列操作后,当我们运行java文件时,最先创建方法区,加载程序中所需要的类,存储该类的static修饰...原创 2019-02-21 17:52:40 · 287 阅读 · 0 评论 -
HashMap经典存储:分拣思路
如何统计每个单词出现的次数:this is a cat and that is a mice and where is the food?存储到Map中 key:Stringvalue:自定义类型 "分拣"思路 思路(一)为所有key创建容器,之后容器中存放对应value 思路(二)第一次创建容器,并存放至value。第二次之后,直接使用容器存放值(边创建容器,边存值) ...原创 2019-02-21 15:52:38 · 196 阅读 · 0 评论 -
双重检查解决多线程效率问题
这里以懒汉式创建对象举例代码路线:从最简单的单线程--->多线程同步方法(synchronized)--->同步块--->同步块的改进(双重检查)简单说明:同步方法和同步块效率大致相同,通过双重检查的模式能最多限度提高效率。package synchronize;/** * 单例模型 * 懒汉式:double checking解决多线程创建对象 * @autho...原创 2019-02-01 13:53:34 · 212 阅读 · 0 评论 -
提高单例模型效率问题
介绍:懒汉式和饿汉式,懒汉式涉及多线程和效率,而饿汉式只涉及效率。package synchronize;import java.security.PrivateKey;/** * 懒汉式: * 1)构造器私有化 * 2)声明私有的静态属性 * 3)对外提供访问属性的静态方法,确保该对象存在 * */public class MyJvm { private sta...原创 2019-02-01 13:45:01 · 139 阅读 · 0 评论 -
线程的创建实现Runnable接口(静态代理模式)
目录:(一)启动步骤(二)静态代理举例(三)实际运用(四)与Thread创建线程的优缺点 (一)必须实现Runnable+run()方法启动:使用静态代理。1、创建真实角色2、创建代理角色 Thread+引用3、代理角色.start(二)静态代理举例(婚庆中介)/** * 静态代理设计模式 * 1、真实角色 * 2、代理角色:持有真实角色的引用 * ...原创 2019-01-15 22:31:45 · 1042 阅读 · 0 评论 -
java没有多维数组
主要讨论的问题:从数组底层的运行机制来看———java没有多维数组。原因:java语言中数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。并且数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情形看上去就是我们通常说的多维数组了。简单举例及说明:int arrName= new int[4][]采用语法格式定义二维数组,但它实质是一维数组...原创 2019-01-14 19:59:57 · 1377 阅读 · 4 评论 -
利用RandomAccessFile向文件指定位置插入内容
原理简介:RandomAccessFile依然不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容,如果需要向指定位置插入内容,程序需要先把插入点后面的内容读入缓冲区,等把需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面。代码:package FileSplitAndMerge;import java.io.F...原创 2019-01-13 20:28:01 · 3885 阅读 · 1 评论 -
字符流纯文本读取乱码解决方案
1.目标:输出b.txt下的记事本字符 2.代码:package IOChar;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.Reader;/** * 纯文本读取 ...原创 2019-01-07 00:26:27 · 1147 阅读 · 0 评论 -
JAVA基础:Collections工具类
package sort;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.List;/** * Collections是工具类 * 1.binarySearch 二分法(有序) * 2.sort 排序 * 3.reve...原创 2018-12-06 21:56:02 · 132 阅读 · 0 评论 -
对自定义类数据排序
提供两种方式作为参考:一是实体类实现java.lang.Comparable下的compareTo接口;二是额外的业务排序类实现java.until.comprator下的compare接口。举例一(compareTo实现):依次按新闻的时间、点击量、标题排序(时间不同按时间,时间相同按点击量,依次同理)package sort;import java.text.SimpleDa...原创 2018-12-06 20:46:33 · 432 阅读 · 0 评论 -
String中什么是不可变
String1.String表示的字符串一旦创建,不可改变(不可变序列)疑问:不可改变指的是什么不可改变?理论上讲:char型数组用final修饰,使得其指针不得修改指向的堆地址,但是在堆内部的数组里面时可以变换数值的。解答:有了final表示字符数组对象的引用不能再改变(就是指针再不能改变-->value的指向不能改变),理论上讲是可以改变字符数组对象的(及是数组中的元素),...原创 2019-02-22 10:56:06 · 667 阅读 · 1 评论 -
可视化日历程序
import java.io.ObjectInputStream.GetField;import java.sql.DatabaseMetaData;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;impo...原创 2019-02-23 14:05:23 · 144 阅读 · 0 评论 -
JAVA技能图谱
原创 2019-07-02 13:20:56 · 169 阅读 · 0 评论 -
JAVA基础:Super()详解
什么是super?是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。如果没有super存在的问题:继承中子类可能会重写父类的方法,子类属性可能覆盖父类属性,在此情况下,如何通过子类得到父类属性或方法呢?public class Super { public static void main(String[] args){ new Child().f()...原创 2019-07-02 13:09:45 · 597 阅读 · 0 评论 -
正则表达式在Java中应用
目录:(一)完全匹配(二)查找与该模式匹配的下一个子序列,并输出内容(三)分组查询(四)替换(五)分割(一)完全匹配import java.util.regex.Matcher;import java.util.regex.Pattern;public class test1 { /** * @param args */ public ...原创 2019-05-29 22:50:05 · 296 阅读 · 0 评论 -
利用反射还原属性
package Reflect;public class Student { //属性 public String name; protected int age; String address; private int idNum; /* //静态代码块,类加载的时候执行 static{ System.out.println("加载类-->我是静态代码块");...原创 2019-02-26 22:29:12 · 169 阅读 · 0 评论 -
反射获得类的属性
package Reflect;public class Student { //属性 public String name; protected int age; String address; private int idNum; /* //静态代码块,类加载的时候执行 static{ System.out.println("加载类-->我是静态代码块");...原创 2019-02-26 22:26:41 · 154 阅读 · 0 评论 -
获得Class对象的多种方法及其不同之处
反射(反编译):简单的说就是:通过.class文件得到.java文件。package Reflect;public class Student { //属性 public String name; protected int age; String address; private int idNum; //静态代码块,类加载的时候执行 static{ Syst...原创 2019-02-26 11:54:35 · 348 阅读 · 0 评论 -
可变长参数语法及应用
可变长参数:语法:类型...变量名(只能3个点,不能多也不能少)位置:必须在参数列表的最后(一个方法最多只能有一个可变长参数)优先级:如果有精确匹配的方法则调用最精确的那个***特性***:可变长参数可以等同看作数组!public class VariableParameter { public static void main(String[] args) { //add(1...原创 2019-02-25 21:43:42 · 191 阅读 · 0 评论 -
文件夹的拷贝
package IOByte;/** * * 封装:文件的拷贝 * 文件夹的拷贝 */import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;imp...原创 2019-02-24 17:40:22 · 188 阅读 · 0 评论 -
JAVA基础:TreeMap和TreeSet
这里为什么要来说这两个东西呢?他们之间的相同点:都是支持排序的容器类(与ArrayList不同,它只能借助Collections工具类进行排序)。不同点呢:就是Set和Map的不同点了。这里先用TreeSet来举例子(一)这里只具体说明提供的两种构造器(意思就是至少实现一种): 1)元素可以排序:实现java.lang.Comparable的compareTo方法 new...原创 2018-12-07 22:18:59 · 245 阅读 · 0 评论 -
实现ArrayList源码包中的方法
import java.security.PublicKey;/** 18/11/26*/public class RewriteArrayListCode03 { private int size; private Object[] elementDate; //初始化 public RewriteArrayListCode03(){ this(10); ...原创 2018-11-26 22:15:51 · 177 阅读 · 0 评论 -
链表索引优化
//注:Linkedlist源码中也进行了这样的处理,它用的是位移运算符号,比我算数运算符效率更高 public Node node(int index){ rangeCheck(index); Node temp=null; if(first!=null){ if(index<size/2){ temp=first; for(int i=0;i<...原创 2018-11-29 21:16:42 · 567 阅读 · 0 评论 -
JAVA基础:Object类(重写equals和toString方法)
/* Object类:为所有类的默认根类(基类) * 1.toString方法:输出当前对象地址 * 如a=new(); * printf(a)与print(a.toString)相同 输出地址。 * 注意:可对toString方法重写,返回想要的值 * 2.equals方法:比较内容 * 如a=new("1","2","3"); * ...原创 2018-10-10 12:10:45 · 899 阅读 · 0 评论 -
最全的访问权限修饰符
public String name1;//公共String name2; // 默认 (缺省-->default修饰)protected String name3;//受保护的private String name4;//私有的 本类 同包下子类 同包下类 不同包下子类 不同包下类 public 1 1 1 ...原创 2018-10-15 22:21:53 · 96 阅读 · 0 评论 -
JAVA基础:单例模型常用方式
/*单例模型 *18.10.8 *修改于:18.11.5 *目的:让某一个类只有一个实例对象 *步骤 1.让构造方法私有化 * 重点:2.对外提供一个公共的获取当前类的对象的方法 * 3.提供一个当前类型的静态变量 *懒汉式:优点:节约内存 缺点:多线程在if语句中有缺陷,容易造成两个对象。 *饿汉式:慢慢百度 * 模型用法:任务管理器,回收站...原创 2018-10-09 23:54:20 · 85 阅读 · 0 评论 -
Java向下转型的意义详解
基础知识多肽回顾:1.多肽是方法的多肽,不是属性的多肽(多肽与属性无关)。2.多肽的存在有三个必要条件:继承、方法重写、父类引用指向子类对象。3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多肽就出现了。详细举例:这里有继承,有方法重写,但是缺少父类引用指向子类对象。class AllAnimal{ public void speak(){ System....原创 2018-10-14 23:29:59 · 8085 阅读 · 5 评论 -
JAVA基础:接口
为什么需要如果接口?接口和抽象类的区别?-接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。。全面地专业的实现了:规范和具体实现的分离。-接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...,则必须能...”的思想。-接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。-项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的“不变”...原创 2018-10-14 18:32:34 · 84 阅读 · 0 评论 -
JAVA基础:抽象类详解
为什么要抽象类?1.抽象类是一种模板模式,抽象类为所有子类提供一个通用模板,子类可以在这个模板基础上进行扩展。2.通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。3.将设计和方法的实现分离了!抽象类的特征: 1.如果一个类中含有抽象方法,那么这个类一定叫抽象类 2.如果是抽象类不一定必须有抽象方法,也可以有普通方...原创 2018-10-14 18:31:09 · 144 阅读 · 0 评论 -
JAVA基础:java命名规则
包: 其实就是文件夹,用于把相同类区分 全部小写 类和接口: 一个单词:单词首字母必须大写 多个单词:每个单词的首字母必须大写 如:HelloWorld方法或者变量: 一个单词:单词首字母必须小写 如:main 多个单词:从第二个单词开始,每个单词的首字母大写 如:studentA...原创 2018-09-27 21:45:51 · 78 阅读 · 0 评论 -
JDK,JRE,JVM的作用及关系
(1)作用:JVM:保证java语言跨平台JRE(Java Runtime Environment 运行时环境):java程序的运行环境JDK(Java Development Kit 开发工具包):java程序的开发环境(2)关系:JDK:JRE+工具JRE:JVM+类库总结:JDK与JRE举例JDK:开发人员必备。JRE:如果是测试人员只需安装JRE,因...原创 2018-09-27 21:09:27 · 508 阅读 · 0 评论 -
JAVA基础:内部类(4种)
内部类在一个类中定义另一个类叫做内部类,一个独立的类,在编译时内部类会被编译成独立.class文件只不过在文件名前面有外部类的类名和$符号例如:在A类中定义一个B类 -> A$B.class注意: 1)内部类是外部类的一个成员,因此内部类可以自由访问外部类的成员,包括私有成员。 2)但是外部类不能访问内部类属性最主要的内部类:1.成员内部类 成员变量 ...原创 2018-10-17 10:50:18 · 177 阅读 · 0 评论 -
java中传值与传地址
相信学习过c的朋友们,对于传值与传地址比较熟悉,而在java中这样的术语用的比较少,那么到底存不存在传值与传地址呢?答案肯定是:存在的!! 在此我就不敲代码了,直接引用了https://blog.csdn.net/qq525099302/article/details/34833271的代码,做下列总结:说明:Student student=new Student();中stu...原创 2018-10-20 14:03:43 · 211 阅读 · 0 评论 -
JAVA基础:包装类(装箱,拆箱,以及内存地址)
/* 包装类 * 18/11/20 * *1.基本类型(全是小写) 包装类型(引用类型) * byte java.long.Byte * short java.long.Short * int java.long.Integer * long java.long.Long...原创 2018-11-20 22:30:37 · 693 阅读 · 0 评论 -
优化冒泡排序
本篇来自于:vx(java团长),讲述了一个美团面试,最后败给冒泡排序的事情,从中受益匪浅。下面传统方式正是教科书式的冒泡排序,也正是大部分人被问及冒泡排序时,所回答的方法。那么今天问两个问题:这个算法有何不足?该如何优化?(ps:你会不会有点懵逼,从来没有考虑过这样的算法还能继续优化)正题来了:传统方式: int [] a={8,1,2,3,5,7}; System....原创 2018-11-25 17:04:24 · 102 阅读 · 0 评论 -
JAVA实现二分法
import java.util.Arrays;/* * 11.18 * 二分法 * * */public class SearchTest03 { public static void main(String[] args){ int [] a={10,15,13,5,65,70,43}; Arrays.sort(a); for(int num:a){ Syst...原创 2018-11-18 14:05:37 · 260 阅读 · 0 评论 -
JAVA基础:数组(选择排序,冒泡排序)
import java.util.Arrays;import javax.swing.text.StyledEditorKit.ForegroundAction;/* * 排序的两种简单算法:选择排序,冒泡排序 */public class SequenceTest02 { public static void main(String[] args){ int [] a={1...原创 2018-11-18 14:04:09 · 134 阅读 · 0 评论 -
JAVA基础:数组(杨辉三角)
/* * 11.17 * 杨辉三角:直角三角形型,等腰三角形型 * 直角三角形:两种定义数组方式 * 注意:第一种更加节约资源 */public class YangHuiTest01 {//直角三角形,方法一:/* public static void main(String[] args){ int [][] a=new int [5][]; for(int i...原创 2018-11-18 14:03:23 · 528 阅读 · 0 评论