
Java基础知识
徐金良
这个作者很懒,什么都没留下…
展开
-
Java-数据类型转换
精度优先级:byte<short<char<int<long<float<double在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换规则为:由低精度向高精度转换。类型自动转换 char类型转换为高级类型时,会转换成对应的ASCII码 基本类型数据与boolean不能互转 byte、short、char类型在参与运算时自动转换为int,但是当使用+=原创 2017-04-08 09:43:23 · 514 阅读 · 0 评论 -
cookie和session有什么区别
cookie是在http下,服务器或脚本能够可以维护客户工作站上信息的一种方式。它是由web服务器保存在用户浏览器上的小文件,可以包含有关的用户信息(如身份识别、密码等信息)。session用来在客户端与服务器之间保持状态的解决方案以及存储结构。相同点:都能进行信息存储。 不同点:cookie采用在客户端保持状态的方案,即数据保存在客户端的浏览器上;session采用的是在服务器端保持状态的方案原创 2017-03-31 23:26:00 · 226 阅读 · 0 评论 -
Collection与Collections的区别
Collection是一个集合接口。它提供对集合对象进行基本操作的通用接口方法,实现该接口主要有list、set、map等,该接口的设计目标是为各种具体的集合提供最大化的同意操作方式。Collections是针对集合类的一个包装类,它提供一系列静态方法以实现对各种集合的搜索、排序、线程安全化等操作,其中大多数方法用来存储线性表。它就是一个工具类,为Collection框架服务。原创 2017-03-31 23:56:25 · 502 阅读 · 0 评论 -
Java基础-volatile作用
解决的问题: 有时为了提高程序的运行效率,编译器会进行优化,优化的方法就是讲访问的变量缓存起来,程序读取这个变量时直接到缓存(例如寄存器)中来读取,而不是去内存中读取。这样做的好处是提高了运行效率,但是遇到多线程时,有可能变量的值因为其他线程改变了,缓存中的值不会改变,这样会导致程序读取的值和实际的值不一致。解决: volatile是一个类型修饰符,它是被设计用来被不同线程访问和修改的变量。原理原创 2017-04-05 16:55:02 · 324 阅读 · 0 评论 -
Java-instanceof
instanceof是Java语言中的一个二元运算符,作用是判断变量所指的对象是否是一个类(接口、抽象类、父类)的实例。返回值为boolean,即TRUE或者FALSE;import java.awt.List;public class Main { public static void main(String[] args){ String hello = "Hello Wo原创 2017-04-05 17:08:00 · 499 阅读 · 0 评论 -
Java-strictfp
strictfp是输入strict float point的缩写,指的是精确浮点,保证浮点数运算的准确性。JVM在进行浮点运算时,在不同的平台上结果可能会不同,但是只要以strictfp修饰一个类、接口、方法,那么在范围内,JVM会完全按照IEEE二进制浮点数算术标准来执行(IEEE 754)。注意: 当一个类被strictfp修饰,那么所有的方法都会自动被strictfp修饰。示例:import原创 2017-04-05 17:29:15 · 341 阅读 · 0 评论 -
Java-基本数据类型
Java提供了8种原始的数据类型: byte、short、int、long、float、double、char、boolean 这些类型不是对象,是Java中不同于类的特殊类型,声明后会分配在栈上。 除了基本类型外,其他的都属于引用类型,包括类、接口、数组等,它以特殊的方式指向对象实体,它们声明时不会分配内存地址,只是存储了一个地址而已。 数据类型 大小 范围 默认值 包装原创 2017-04-06 15:02:38 · 327 阅读 · 0 评论 -
Java-不可变类
定义:是指当创建这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期内,它的成员变量不允许被修改。在Java中,所有基本类型的包装类都是不可变类,还包括String。 关于String,对如下的代码进行解读:public strictfp class Main { public static void main(String[] args){原创 2017-04-06 15:46:00 · 426 阅读 · 0 评论 -
Java-数组是对象
数组的概念:数组是指具有相同类型的数据的集合,它们一般具有固定的长度,并且在内存中占据连续的空间。在C/C++中:数组名只是一个指针,这个指针指向了数组的首元素,既没有属性也没有方法可以调用。在Java中:数组不仅有其自己的属性,例如length,也有其方法可以调用,例如clone()。由于在Java中,对象的特点是封装了一些数据,同时提供一些属性和方法,从这个角度讲,数组是对象。原创 2017-05-19 15:26:20 · 323 阅读 · 0 评论 -
Java-数组初始化方式
在Java语言中: 一维数组的声明方式为: type arrayName[]或type[] arrayName 详解: type可以使基本的数据类型,也可以是类,arrayName表示数组的名字,[]表示为一维数组。 与C++的不同: 1.在Java语言中,数组被创建后,会根据数组存放的数据的数据类型初始化成对应的初始,例如int类型会初始化为0,对象类型会初始化为null; 2.另一原创 2017-05-19 15:45:18 · 357 阅读 · 0 评论 -
Java-length、length()、size()区别
lengthlength是属性,用来获取数组的长度。 在C/C++中,每当调用方法传递数组时,必须同时传递数组的长度,因为在C/C++中,方法调用时传递的参数为数组的首地址,而对数组的长度无法获知,可能会导致越界问题。length()length()方法是针对字符串而言的,String提供的length()方法来计算字符串的长度。size()size()方法是用来计算对象大小的方法,是针对泛型集合原创 2017-05-19 16:06:40 · 311 阅读 · 0 评论 -
Java-异常处理
问题引申: try{}里面有一个return语句,那么finally{}块中的代码能否被执行?如果能够被执行,什么时候执行,return前还是return后?在Java语言中,finally的作用是为了保证无论在什么情况下,finally块的代码一定会被执行,但是return语句代表着结束当前的函数,因此finally块中的代码一定会被执行,而且在return语句之前执行,如果finally中有r原创 2017-05-19 16:40:05 · 320 阅读 · 0 评论 -
Java-IO流
概念:在Java语言中,输入和输出都被称为抽象的流,流可以看成一组有序的字节集合,即数据在两个设备之间的传输。流的本质是数据传输,根据处理数据类型的不同,流可以分为两大类: 字节流、字符流字节流 字节流以字节(8 bit)为单位,包含两个抽象类:InputStream(输入流)和OutputStream(输出流)。字符流 字符流以字符(16 bit)为单位,根据码表映射字符,一次可以读多个字节原创 2017-05-20 09:33:26 · 201 阅读 · 0 评论 -
Java-Socket通信
概念: 网络上两个程序通过一个双向的通信连接实现数据交换,这个双向链路的一端称为一个Socket。 Socket也称为套接字,可以用来实现不同的虚拟机或不同的计算机之间的通信。在Java语言中,Socket可以分为两种类型:面向连接的Socket通信协议(TCP),和面向无连接的Socket通信协议(UDP)。基于TCP的通信过程: Server(服务器)端Listen(监听)指定的某个端口(原创 2017-05-20 10:03:10 · 445 阅读 · 0 评论 -
java-内存区域
首先看一张图片,显示了java虚拟机运行时数据区: 程序计数器 是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。为了线程切换后能恢复到正确的位置,原创 2017-09-08 14:36:45 · 320 阅读 · 0 评论 -
单例模式-java
在开发中,我们也许会用到只能实现一个实例的类的情况,也就是面向对象中重要的设计模式——单例模式,下面,就来介绍一下集中常见的单例模式以及优缺点。饿汉public class Singleton { private Singleton(){} private static Singleton singleton = new Singleton(); public stati原创 2017-11-09 15:18:23 · 302 阅读 · 0 评论 -
Java面向对象的特征解析
面向对象的主要特征包括抽象、封装、继承、多态一、抽象抽象不打算解决所有问题,而是其中一部分问题,暂时不去理会部分细节。抽象包括两个方面:过程抽象;数据抽象。 数据抽象就是针对对象的属性; 过程抽象就是针对对象的行为特征,即方法。由此展开抽象类与接口的异同:抽象类:如果类中包含抽象方法,那么就是抽象类,也就是说,抽象类中一定有抽象方法,但不一定全是抽象方法。通过abstract修饰类或者方法(不能原创 2017-03-14 15:38:11 · 319 阅读 · 0 评论 -
Java反射机制
第一次阿里面试,就说到了这个问题,当时自己心里本来就乱,而且对反射理解的也不透彻,所以答得并不好。今天就在这里记录一下自己学习反射的一些所得吧。首先,反射机制是Jave的一个特性,像C、C++这种语言根本就没有他,虽然在实际的操作中,并不会经常用到,而且用错了还容易适得其反,但是作为java的一个特性,研究java的话就跳不开他,那么,就让我们认真学习、认真总结吧。 下面介绍一下反射机制提供的功能原创 2017-03-12 17:46:33 · 984 阅读 · 0 评论 -
Java—浅谈clone()
首先阐述一个概念: Java在处理基本数据类型(例int,char,double等)时,都是采用按值传递(传入的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是一个对象的引用)的方式执行。在实际的操作中,可能需要一个与已存在对象相同的另一个对象,并且对另一个对象的修改不会影响先前的对象,于是Java提供了一个clone()方法实现这种需求。这种方法返回的Object对象原创 2017-03-12 16:22:36 · 326 阅读 · 0 评论 -
Java-round、ceil、floor
Math类是一个包含许多计算常量与数学方法的类,能自动导入,并且里面全是静态方法。 round、ceil、floor这三个方法就位于这Math类中。round方法表示四舍五入。 实现原理是原数字先加上0.5再向下取整 返回类型为int 等同于:(int)Math.floor(x + 0.5F); 例题: Math.round(11.5) = 12 Math.round(-11.5)原创 2017-04-08 09:57:54 · 320 阅读 · 0 评论 -
Java-char存储中文汉字
Java中的char型变量可以存储一个中文汉字。 因为Java默认使用的是Unicode编码,即每个字符占用两个字节,中文在由两个字节组成,因此可以存储中文汉字。String是由char组成的,但是String采用了一种更加灵活的方式来存储,即英文暂占用一个字符,中文占用两个字符,这种存储方式的额优点是减少所需存储空间,提高存储效率。原创 2017-04-08 10:51:08 · 1404 阅读 · 0 评论 -
Java-字符串创建与存储的机制
第一种情况 String str1 = new String(“abc”); String str2 = new String(“abc”); 这两个声明,代表存在两个对象,内容相同,但是内存地址不同,即在堆中的位置不同。只要用new总会生成新对象。第二种情况 String str1 = “abc”; String str2 = “abc”; 在JVM存在一个字符串池,里面保存很多St原创 2017-04-08 11:23:16 · 564 阅读 · 0 评论 -
Java-“==”、“equals”、“hashCode”比较
“==” 用来比较两个变量的值是否相等 比较变量对应内存中所存储的值是否相等,可以比较基本类型的数据或两个引用变量。 如果比较基本类型的变量,可以直接使用“==”来判断值是否相等。 如果比较引用变量,用“==”可以比较两个变量是否指向同一个对象,即判断两个变量所对应内存中的数值是否相等。但是不能比较两个对象的内容是否相等。equals equals是Object类提供的方法之一。 在没原创 2017-04-09 10:00:14 · 338 阅读 · 0 评论 -
Java-String、StringBuffer、StringBuilder、StringTokenizer区别
Java语言有四个类可以对字符或字符串操作,他们分别是Character、String、StringBuffer、StringTokenizer,其中Character是对于单个字符的操作,String用于字符串操作,属于不可变类,StringBuffer也用于字符串操作,不同之处是StringBuffer属于可变类。String与StringBuffer的区别String属于不可变类,Stri原创 2017-04-09 10:30:26 · 430 阅读 · 0 评论 -
Java-switch详解
switch用于多分支选择,使用时的规则是switch(expr),其中expr只能是一下两种:枚举常量 内部是由整型或者字符类型实现整数表达式 整数表达式指的是基本类型int或者包装类Integer,也包括不同的长度整型,例如short。换一种说法,整型或者能够隐式转换为int类型的基本类型或者包装类可以,包括: int,Integer,byte,Byte,short,Short,ch原创 2017-03-30 17:46:33 · 753 阅读 · 0 评论 -
Java-static关键字的作用
static关键字的两个作用:为数据类型或者对象分配单一的存储空间,与创建对象的个数无关。将属性或者方法与类绑定在一起,也就是可以不创建对象的情况下直接通过类调用属性和方法。static的四种使用情况:- static修饰成员变量Java中没有全局的概念,但是通过static可以达到全局的效果。 Java提供两种类型的变量:用static修饰的静态变量和不用static修饰的实例变量。原创 2017-03-30 16:40:57 · 465 阅读 · 0 评论 -
Java-assert(断言)
assert是一种软件测试的方法,提供了一种在代码中正确性检查的机制,目前很多开发语言都支持这种机制。它的作用是检查一个boolean表达式,程序的正确运行必须保证这个表达式为TRUE,返回false则代表程序不正常,系统需要提供告警信息并退出程序。assert主要是用来保证程序的正确性,一般用于程序的开发和测试,为了提高程序运行的效率,软件发布后,assert检查默认是关闭的。assert的用法:原创 2017-03-30 10:05:16 · 1492 阅读 · 0 评论 -
Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。1.与运算符 与运算符用符号“&”表示,其使用规律如下: 两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13{publ转载 2017-03-30 09:46:12 · 255 阅读 · 0 评论 -
final、finally、finalize浅析
finalfinal可以修饰属性、方法、类,分别代表属性不可变、方法不可覆盖、类不能被继承final修饰属性:被final修饰的变量不可变。但是不可变有两种含义,一种是引用不可变、一种是对象不可变。final在这里指的是引用不可变,所以,被final修饰的属性必须初始化,初始化有以下几种方式:在定义的时候初始化可以在初始化块中初始化,但是不能再静态初始化块中初始化静态final成员变量可以在静原创 2017-03-28 20:09:27 · 403 阅读 · 0 评论 -
Java内部类
定义:在Java语言中,把一个类的定义到另一个类的内部,在类里面的这个类就叫做内部类,这个内部类可以看做外部类的成员。扩展:还有一种类被称为顶层(top-level)类,指的是类定义代码不嵌套在其他类定义中的类。嵌套类与内部类相似,只是嵌套类是c++的说法,内部类是Java的说法。内部类分为四种:静态内部类成员内部类局部内部类匿名内部类静态内部类被声明为static的内部类,通常内部类需要翻译 2017-03-27 09:08:50 · 410 阅读 · 0 评论 -
常见排序算法浅析
排序算法是面试笔试的一个重点,今天,就让我们把常见的排序算法总结一遍。 - 选择排序思想:遍历一组记录,每次遍历选取一个最大的数(最小的数),来依次替代需要替代的位置(从头开始选择)。源代码:/** * 选择排序 * @param a * 时间复杂度 n的平方 最好,最差,平均都是 */ public static void selectSort原创 2017-03-20 19:36:28 · 391 阅读 · 0 评论 -
Java基础—JDBC访问数据库
**Java基础—JDBC访问数据库** JDBC,全称Java DataBase Connectivity。它提供各种方法,包括访问数据库、执行sql语句等。这些操作数据库的类都在java.sql包中,下面是通过JDBC链接数据库的一些步骤。加载JDBC驱动器。其实也就是咱们通常说的一些jar包,这些包一般在数据库的官网可以找到,Java官网也有的,一般5/6个左右,直接加到项目中的class原创 2017-03-10 15:33:29 · 367 阅读 · 0 评论 -
JDBC的事务处理
JDBC的事务基本知识事务的定义:一个事务是由一条或多条对数据库操作的sql语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行后,整个事务才会提交给数据库。 结束事务的操作:commit()/rollback()。commit表示对事务的提交,rollback表示对事务的回滚,这两种方法都处于java.sql.Connection类中。 Q:通过什么方法保持对数据库的多次操作后原创 2017-03-10 19:34:42 · 369 阅读 · 0 评论 -
Java程序初始化顺序
Java程序初始化原则静态优先于非静态。具体指的是静态的变量或者是对象优先于非静态的变量或者是对象。并且,静态只初始化一次,而非静态可能会初始化多次。父类优先于子类进行初始化。按照成员变量定义的顺序进行初始化,并且成员变量优先成员方法。上面说的可能有点抽象,也不能快速的进行判断,下面是在真正的程序中初始化的顺序: 父类静态变量——>父类静态代码块——>子类静态变量——>子类静态代码块——>原创 2017-03-12 15:48:41 · 838 阅读 · 0 评论 -
Java类加载过程
类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。1. 类加载器**类加载器的任务:**根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例。BootstrapClassLoader、ExtClassL...转载 2019-02-23 10:18:19 · 221 阅读 · 0 评论