
java学习之路
文章平均质量分 95
Java初学者系统知识构建,为Android开发做好铺垫。
由浅入深,代码与实例相结合。
aotulive
大厂螺丝钉。逆水行舟,不进则退
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM核心知识(二)
JVM核心知识(一)JVM内存模型Java虚拟机规范试图定义一种java内存模型,来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。主内存和工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中变量存储到内存和从内存中取出变量这样的底层细节。此处的变量和Java编程中所说的变量有所区别,它包括实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,不存在并发竞争问题,为了获得好的原创 2021-03-27 16:39:26 · 427 阅读 · 0 评论 -
JVM核心知识(一)
asdf原创 2021-01-27 11:17:59 · 492 阅读 · 0 评论 -
插入排序-希尔排序
希尔排序是插入排序的一种,有关插入排序可以移步:直接插入排序。希尔排序是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。排序比较值相同时,前后位置不发生改变,则为稳定排序算法,反之为非稳定排序算法。设计思想希尔排序又称为缩小增量排序,基本思想是分组的直接插入排序。由直接插入排序算法分析可知,若数据序列越接近有序,则时间效率越高;再者,当n(待排序长度)较小时,时间效率也高。希尔排序正是基于这两点对直接插入排序算法进行的优化:将一个数据序列分为若干组,每组由若干相隔一段距离(原创 2020-09-26 22:32:33 · 484 阅读 · 0 评论 -
Zookeeper核心知识及分布式一致性算法
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。而这些功能都是基于Zookeeper能在分布式的集群中保证数据一致性的,这也是Zookeeper最核心的能力。Zookeeper集群对数据的一致性的保证和Zookeeper集群高可用这两个核心功能归纳为两个知识点:1.ZAB( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)2原创 2020-09-24 09:52:44 · 1799 阅读 · 0 评论 -
Docker的安装
Docker架构在安装Docker之前,先来了解一下Docker的组成架构,了解Docker中常见名词概念。Image镜像;用于创建容器的只读模板Container容器;容器是独立运行的一个或一组应用,容器是镜像创建的运行实例Registry仓库;用来保存镜像,如DockerHub,类似GitHubClient客户端;Docker客户端通过命令行或其他...原创 2019-10-14 09:25:34 · 183 阅读 · 0 评论 -
日期操作类
介绍Java中常用的日期类型及对日期的相对操作。Date类Date类是一个较为简单的操作类,在使用中直接使用java.util.Date类的构造方法并进行输出就可以得到一个完证的日期,构造方法:public Date()【得到系统当前时间】import java.util.Date;public class DateDemo01{ public static void main(Stri原创 2017-12-24 21:17:46 · 515 阅读 · 0 评论 -
Math类+Random类+NumberFormat类
Math类Math类是数学操作类,提供了一系列的数学操作方法,包括求绝对值、三角函数等,在Math类中提供的一切方法都是静态方法,所以直接由类名称调用即可,下面简单介绍Math类的基本操作。public class MathDemo01{ public static void main(String[] args){ System.out.println("求平方根:"+M原创 2017-12-25 20:49:58 · 330 阅读 · 0 评论 -
Java--包的概念及使用
包的概念及使用 一. 包的基本概念 可以试想这样一个场景,现在如果有多个人开发一个共同项目,则肯定会出现类名称相同的情况,这样一来就会比较麻烦,所以利用package关键字来解决此问题。 包实际上是一个文件夹,在需要定义多个类或者接口时,为了避免名称重复而采用的一种措施,如果使用直接在程序中加入package关键字即可。 下面使用package关键字进行一个程序的打包 【代码】packa原创 2016-10-30 20:07:30 · 526 阅读 · 0 评论 -
Java--异常处理进阶
异常进阶 一.Exception类与RuntimeException 在Java面试中经常会询问Exception类与RuntimeException的区别,如果想理解这两个类的区别可以看如下代码: 【字符串类型转化整型】public class RuntimeExceptionDemo01{ public static void main(String args[]){原创 2016-10-29 21:42:19 · 437 阅读 · 0 评论 -
Java--jar命令的使用与java命名规范
jar命令的使用与Java命名规范 一.jar命令使用 当开发者为用户开发一整套Java类之后,肯定要把这些类交给用户使用,但是如果交给用户编译好的class文件会十分不方便,所以一般情况下会将这些*.class文件压缩成一个jar文件(Java Archive File)进行使用。如果想要生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。直接在命令行例输原创 2016-10-31 19:56:16 · 2865 阅读 · 0 评论 -
为什么要使用泛型
在讲解泛型之前,先看看下面一个实例。原创 2016-11-29 21:22:39 · 865 阅读 · 2 评论 -
泛型应用
泛型的基本应用 泛型可以解决类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或者实例化只要指定好需要的类型即可, 【泛型类定义格式】[访问权限]class 类名称{ [访问权限] 泛类型标识 变量名称; [访问权限] 泛类型标识 方法名称(){}; [访问权限] 返回值类型声明 方法名称原创 2016-12-02 20:54:16 · 399 阅读 · 0 评论 -
泛型的安全警告
在泛型应用中最好在声明类对象时制定好其内部数据类型,如Info,如果不指定类型,这样用户在使用这样的类时,就会出现不安全操作的警告信息。 【不指定泛型类型】class Info{ private T var; public T getVar(){ return var; } public void setVar(T var){原创 2016-12-21 21:16:25 · 1428 阅读 · 0 评论 -
通配符
前面在操作时都设置了一个固定的类型,在泛型操作中也可以通过通配符接收任意指定泛型类的对象。匹配任意类型的通配符 在开发中对象的引用传递是常见的,但是如果在泛型类的操作中,在进行引用传递时泛型类型必须匹配才可以进行传递,否则是无法进行传递的,如下面的代码。 【使用泛型声明后的对象引用传递问题】public class GenericsDemo12{ public sta原创 2017-02-15 11:42:53 · 743 阅读 · 0 评论 -
泛型接口和方法
泛型接口定义泛型接口 在JDK1.5之后泛型接口实现的两种方式泛型方法定义泛型方法通过泛型方法返回泛型类实例使用泛型统一传入的参数类型泛型与子类继承的限制原创 2017-02-15 22:30:11 · 1097 阅读 · 0 评论 -
StringBuffer类
/*说来惭愧,距离上次更博已经过去好长时间了,因为项目,因为实训。话不多说,我又回来啦,哈哈,感觉真好!*/认识StringBuffer类前面说过String类的一条特性是,String的内容一旦声明则不可更改, 如果改变,则改变的是String的引用地址,那么如果现在的情况是一个字符串经常需要改变,此时就必须使用StringBuffer类。String类中可以通过“+”进行字符串的连接,但在St原创 2017-09-19 09:41:48 · 474 阅读 · 0 评论 -
泛型数组+泛型嵌套+泛型应用实例
泛型数组关于泛型方法-泛型接口和方法使用泛型方法时,也可以传递和返回一个泛型数组。 【接收和返回泛型数组】@SuppressWarnings("unchecked")public class GeneriseDemo30{ public static void main(String args[]){ //返回泛型数组 Integer i[]=fun(1原创 2017-04-22 16:14:55 · 2944 阅读 · 0 评论 -
Runtime类
认识Runtime类在Java中Runtime类表示运行时操作类,是一个封装定义JVM进程的类,,每一个JVM都对应着一个Runtime类的实例,此实例由JVM运行时为其实例化。所以在JDK文档中读者不会发现任何有关Runtime类中构造方法的定义,这是因为Runtime类本身的构造方法是私有化的(单例设计),如果取得一个Runtime实例,只能通过以下方式:Runtime run = Runtim原创 2017-09-23 16:34:24 · 387 阅读 · 0 评论 -
System类
认识System类System类是一些与系统相关属性和方法的集合,而且在System类中所有的属性都是静态的,直接使用System类就可以调用这些属性和方法。 方法定义 类型 描述 public static void exit(int status) 普通 系统退出,如果status为非0表示退出 public static void gc() 普通 运行垃圾回收原创 2017-12-23 15:51:48 · 900 阅读 · 0 评论 -
线程的状态
要想实现多线程,必须在主线程中创建新的线程对象。任何线程对象一般都有5中状态,即创建、就绪、运行、阻塞、终止。线程状态的转移与方法之间的关系如下图:Created with Raphaël 2.1.0开始就绪状态阻塞状态?阻塞解除运行状态终止yesno运行状态分析 1. 创建状态 在程序中用构造方法创建了一个线程对象后,新的线程对象就处于新建状态,此时,它就有了相应的内存空间和其他资源,原创 2016-11-06 14:27:34 · 438 阅读 · 0 评论 -
进程与线程
进程是程序的一次动态执行过程,它需要经历从代码加载、代码执行到代码执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。多进程操作系统能同时运行多个进行进程(程序),由于CPU具有分时机制,所以每个进程都能循环获得自己的CPU时间片。由于CPU执行速度非常快,使得程序好像在“同时”执行一样。 多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是原创 2016-11-06 14:41:22 · 320 阅读 · 0 评论 -
Java中线程的实现
在Java中要想实现多线程操作有两种方法: (1) 继承Thread类 (2) 实现Runnable接口 一. 继承Thread类 Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程实现类。在Thread子类中,必须明确的覆写Thread类中的run方法,此方法为线程的主体。下面进行多线程的实现 【继承Thread类实现多线程】class M原创 2016-11-06 14:49:02 · 393 阅读 · 2 评论 -
线程操作的方法
从线程状态 的图中可以发现,在Java实现多线程的程序中,虽然Thread类实现了Runnable接口,但是操作线程的主要方法并不在Runnable接口中,而是在Thread类中。 下面介绍几种常用的线程操作方法。 1. 取得和设置线程的名称 在Thread类中可以通过getName()方法取得线程的名称,还可以通过setName()方法设置线程的名称。 线程的名称一般在启原创 2016-11-08 11:47:28 · 518 阅读 · 0 评论 -
线程操作范例
设计一个线程类。可以产生3个线程对象,并分别设置3个线程的休眠时间,具体如下: 线程 休眠 线程A 休眠10秒 线程B 休眠20秒 线程C 休眠30秒从之前的学习应该可以知道,线程的实现有两种方式,一种是继承Thread类,另一种是实现Runnable接口。而且在类中应该存在保存线程名称和休眠时间的属性。实现一–继承Thread原创 2016-11-08 23:00:54 · 460 阅读 · 0 评论 -
同步与死锁
一个多线程的程序如果是通过Runnable接口实现的,则意味着类中的属性将被多个线程享用,那么就造成一个问题,如果这个多线程要同时操作同一资源时就有可能出现资源的同步问题。例如前面的卖票程序,多个线程同时执行时就会把票数卖为负数(线程的实现)。问题的引出 现在通过Runnable接口来实现多线程,共产生3个线程对象,同时卖出5张票。 【观察程序的问题】class MyThread imple原创 2016-11-13 12:41:07 · 577 阅读 · 0 评论 -
线程操作的实例
在线程操作中有个经典的案例程序,即生产者和消费者问题,生产者不断生产,消费者不断消费生产者生产的产品。 生产者生产出的信息方法一个区域之中,消费者从区域中将数据取出来,但是本程序中因为牵扯到线程运行的不确定性,所以会存在两个问题: 1. 假设生产者线程刚向数据空间添加了信息的名称,还没有加入该信息的内容,程序就切换到了消费者线程,消费者线程将把信息的名称和上一个信息的内容联系在一起。 2.原创 2016-11-22 22:15:56 · 191 阅读 · 0 评论 -
线程的生命周期
在Java中一个线程对象都有自己的生命周期,如果要控制好线程的生命周期,则首先应认识其生命周期。 从图中可以看出,大部分的线程生命周期的方法基本上都学过了。 线程的操作方法 其中三个新的方法如下: 1. suspend()方法:暂时挂起线程。 2. resume()方法:恢复挂起的线程。 3. stop()方法:停止线程。 但是对于线程中suspend()、resume()、st原创 2016-11-26 11:34:18 · 364 阅读 · 0 评论 -
Java--【第一章:Java概论及开发环境配置】
一.Java概论1.Java诞生由Sun公司开发,Sun公司后被ORACLE公司收购。2.Java主要技术分支•原创 2016-07-03 23:18:46 · 469 阅读 · 0 评论 -
第二章:简单的Java程序
简单的Java程序2.1 一个简单的Java范例public class TextJava{public static viod main(String args[]){ int num=10;//(表示单行注释)定义整型变量并实例化 num=35;//修改变量内容 System.out.println("num的内容是:"+num); System.out.p原创 2016-07-12 06:52:45 · 461 阅读 · 0 评论 -
第三章:Java基础程序设计(上)
Java基础程序设计3.1 数据类型的划分 Java中的数据类型可分为基本数据类型与引用数据类型。 原始数据类型也成为基本数据类型,它们包括了最基本的boolean、byte、char、short、int、long、float与double等类型。 引用数据类型是以一种特殊的方式指向变量的实体,这种机制类似于C++/C的指针。这类变量在声明时不会分配内存,必须另外进行原创 2016-07-14 19:37:11 · 406 阅读 · 0 评论 -
第三章:Java基础程序设计(中)
Java基础程序设计 3.3数据类型的转换 Java中数据类型在定义时就已经确定了,不能随意的改变其数据类型,但是Java允许用户有限度的做类型的转换处理。数据类型的转换分为“自动类型的转换”和“强制类型的转换”。 3.3.1 数据类型的自动转换 在程序中已经定义好了数据类型的变量,若要用另一种数据类型表示时,Java会在下列的条件都成立时自动转换数据: (1) 转换前的数据类型与原创 2016-07-18 22:32:45 · 398 阅读 · 0 评论 -
第三章:Java基础程序设计(3)
Java基础程序设计 一. 运算符 Java中提供了许多的运算符,这些运算符除了可以处理一般的数学运算以外,还可以做逻辑运算,位次运算等。根据其使用类型的不同,运算符可以分为赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、括号运算符。 二. 表达式与语句 这里主要讲解其中常用的运算符。 1. 赋值运算符(=) 等号(=)在Java中并不是“等于”意思,而是“赋值”的意思原创 2016-07-20 18:52:18 · 401 阅读 · 0 评论 -
Java基础程序设计(4)
Java基础程序设计 一. 程序的结构 1. 顺序结构 程序自上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的结束。顺序结构是在程序设计中最常用的结构,在程序中扮演了非常重要的角色,因为大部分的程序基本上是依照由上而下的流程来设计的。 2. 选择结构 选择结构是依据条件成立与否决定要执行哪些语句的一种结构,其流程如下: 【例】public class IfDe原创 2016-07-27 17:25:07 · 812 阅读 · 0 评论 -
第四章:数组的定义及使用
数组是一组相关数据的集合,一个数组实际上是一连串的变量,数组按照使用可以分为一维数组,二维数组和多维数组。 一. 一维数组 一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。 要使用Java中的数组,必须经过声明数组和分配内给数组两个步骤。 一般步骤:数据类型 数组名[]=null;数组名=new 数据类型[长度];也可简化为:数据类型[] 数组名=null;数组声明格式中,原创 2016-08-07 18:25:40 · 483 阅读 · 1 评论 -
第四章:方法的声明及使用
方法的声明及使用 一. 方法的定义 方法的定义在Java中可以使用多种格式,方法暂时使用如下格式进行定义。 【方法的定义格式】public static 返回值 方法名(类型 参数1,参数2,,,,){ 程序语句; [return 表达式];}注意:如果不需要传递参数到方法中,只要将括号写出来,不必填入内容。如果方法没有返回值,在我在返回值类型明确写出void。 【定义一原创 2016-08-23 09:17:40 · 781 阅读 · 0 评论 -
第四章:数组的引用传递
数组的引用传递 一. 传递及返回数组 如果要向方法传递一个数组,则方法的接受参数必须是符合其类型的数组。而且数组引用属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果也将保留下来。 【向方法中传递数组】public class ArrayRefDemo01{ public static void main(String args[]){原创 2016-08-26 16:00:35 · 1510 阅读 · 0 评论 -
第四章:Java新特性对数组的支持
Java新特性对数组的支持 一. Java新特性——可变参数 在调用一个方法时,必须根据方法的的定义传递指定的参数。但是在JDK1.5(JAVA SE5.0)之后就产生了新的感念——可变参数,即方法中可以接收的参数不再是固定的,而是随着需要传递的,可变参数的定义格式如下: 【可变参数的定义格式】返回值类型 方法的名称(类型…参数名称)向方法中传递可变参数之后,其中的参数是以数组的形式保留下来原创 2016-08-26 20:11:36 · 620 阅读 · 0 评论 -
Java-面向对象(基础篇)--面向对象基础
面向对象(基础篇) 一. 面向对象的基本概念 面向对象是针对用户的要求进行分析,将分析的结果设计成图纸,然后将一切的准备工作全部处理完之后再分块制作,最后将各个部分组装在一起。 对于面向对象的程序设计用封装性、继承性、多态性3个主要特性。 1. 封装性 封装是面向对象的方法所应遵循的一个重要原则,有两个含义。一是指把对象的静态属性和动态方法(行为)看成一个不可分的整体,将两者“封原创 2016-08-27 20:06:46 · 898 阅读 · 1 评论 -
Java-面向对象(基础篇)--封装性
封装性 封装性是面向对象的第一大特性,所谓的封装性就是指对外部的不可见性。问题如下:class Person{ String name ; // 声明姓名属性 int age ; // 声明年龄属性 public void tell(){ System.out.println("姓名:" + name + ",原创 2016-08-28 22:03:00 · 613 阅读 · 0 评论 -
Java-面向对象(基础篇)--构造方法与匿名对象
一.构造方法 在实例化一个对象后,如果要为这个对象中的属性赋值,则必须用setter方法为属性分别赋值才可以,这显然不够方便。这时可以通过构造方法来完成这样的操作。在面向对象中构造方法的主要作用是为类中的属性初始化。 构造方法可以看成为一种特殊的方法: 【构造方法的定义格式】class 类名称{ 访问权限 类名称(类型1 参数1,类型2 参数2,…….){ …….//构原创 2016-08-30 20:32:39 · 559 阅读 · 0 评论