
JavaSE学习记录
tianxiawuti
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
整形常量,变量
Java整形常量,变量中的一些注意点Java 语言整型常量的四种表示形式十进制整数如:99, -5, 0八进制数要求以 0 开头,如:012十六进制数要求以0x 或 0X 开头,如:0x13二进制数要求以0b或者0B开头,如:0b01110011int b=015;System.out.println(b);//输出结果是13int c=0b1101;...原创 2019-08-05 15:54:40 · 320 阅读 · 0 评论 -
使用BigDecimal进行浮点数的比较
浮点数是不精确的,要避免比较中使用(注意:有的时候的比较是符合要求的)float f = 0.1f;double d = 1.0/10;System.out.println(f==d);//结果为falsefloat d1 = 423432423f;float d2 = d1+1;if(d1==d2){ System.out.println("d1==d2");//输出结果为d...原创 2019-08-05 16:33:38 · 989 阅读 · 0 评论 -
算数运算符
- 整数运算的运算规则如果两个操作数有一个为Long, 则结果也为long。没有long时,结果为int。即使操作数全为short,byte,结果也是int。 byte a=1;//不报错 System.out.println(a);//1 int b=2; byte c=a+b;//会报错,因为a+b是int类型的 long d=3;//不会报错...原创 2019-08-05 17:06:10 · 109 阅读 · 0 评论 -
位运算符
位运算符位运算指的是对数字进行二进制按位的运算,数字在计算机中是按照二进制来表示的1看成真,0看成假,联想逻辑运算的规则(1&0结果为0)>>>>>> 右移运算符,右移1位相当于除2取商<<<<<< 左移运算符,左移1位相当于乘2^按位异或∣|...原创 2019-08-05 17:58:42 · 191 阅读 · 0 评论 -
接口总结
接口的使用1.接口使用interface来定义2.Java中接口和类是两个并列的结构3.接口中的成员:JDK7及以前,只能定义全局常量和抽象方法全局常量:用public static final修饰,可以省略抽象方法:用public abstract修饰,可以省略JDK8,除了定义全局常量和抽象方法之外,还可以定义静态方法和默认方法注意:接口中不能定义构造器,意味着接口...原创 2019-08-08 08:25:05 · 306 阅读 · 0 评论 -
接口的应用:代理模式(Proxy)浅谈
概述代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问。代理模式的使用场景:1)安全代理:屏蔽对真实角色的直接访问(不让被代理类对象暴露出去)。2) 远程代理:通过代理类处理远程方法调用(RMI)3) 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象 。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有 1...原创 2019-08-08 09:43:21 · 1188 阅读 · 0 评论 -
字符串连接符
“+”两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。比如3+“4"会得到"34”。 int a=12; System.out.println("a="+a);//输出结果: a=12注意:字符串不是基本数据类型而是对象String a="3";int b=4;int c=5;System.out.println(a+b)...原创 2019-08-05 18:48:59 · 455 阅读 · 0 评论 -
自动类型转换
自动类型转换定义:自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。这里的容量大小比的不是字节数,比如long类型的值可以自动转化成float类型的值,因为float表示的范围更大,只是转化时会有精度损失,所以float a=31L是可以的。long d=3.1会报错,因为3.1默认为double类型,表示的范围比long更大,改成3.1F也不行。种类:byte->s...原创 2019-08-05 19:23:29 · 696 阅读 · 0 评论 -
强制类型转换
强制类型转换定义:又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。double x = 3.14; int nx = (int)x; //值为3char c = 'a';int d = c+1;System.out.println(nx);//3,舍去小数部分,不是四舍五入造成数据丢失,就算是.99也会...原创 2019-08-05 19:36:11 · 118 阅读 · 0 评论 -
基本数据类型转换的注意点
注意:操作比较大的数时,要留意是否溢出(结果比表示范围大),尤其是对整数进行操作时int money = 1000000000; //10亿(10亿在int的表示范围内)int years = 20;//返回的total是负数,因为超过了int的范围溢出了int total = money*years;//结果是int,因为money和years都是int,算的时候因为超过了int的范围...原创 2019-08-05 19:48:14 · 187 阅读 · 0 评论 -
Math类
java.lang包中的Math类提供了一些用于数学计算的方法。Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1。double d=Math.random();System.out.println(d);//这个输出结果每次都不一样int i = (int) (6 * Math.random()); //用来产生[0,5]之间的随机整数,如...原创 2019-08-05 20:11:27 · 152 阅读 · 0 评论 -
break和continue
例子:把[100,150]之间不能被3整除的数输出,并且每行输出5个 int count = 0;//定义计数器 for (int i = 100; i < =150; i++) { //如果是3的倍数,则跳过本次循环,继续进行下一次循环 if (i % 3 == 0){ cont...原创 2019-08-05 21:35:05 · 153 阅读 · 0 评论 -
复合语句
复合语句又叫做语句块,是用花括号扩起的任意数量的Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。注意:块可以嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。public static void main(String[] args) {...原创 2019-08-05 21:45:23 · 222 阅读 · 0 评论 -
方法与方法的重载
方法注意:return 语句终止方法的运行并返回数据。Java中进行方法调用中传递参数时,遵循值传递的原则基本类型传递的是该数据的值引用类型传递的也是值,该值是指向的对象的地址。使得形参与实参指向的是同一个对象。对于调用类方法,可以通过类名的方式调用,也可以用引用变量名来调用方法的重载(overload)定义:方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。...原创 2019-08-05 22:21:18 · 118 阅读 · 0 评论 -
递归计算n!并获取所花费的时间
递归的特点: 自己调用自己例子: static int b=0 static void a() { System.out.println("a"); b++; if(b<10){ a(); }else{ return; } }注意:static的...原创 2019-08-05 23:00:33 · 739 阅读 · 0 评论 -
接口的有关问题
问题一:下面的程序有无问题?如果有问题,怎么修改interface A{ int x=0;}class B{ int x=1;}class C extends B implements A{ public void pX() { System.out.orintln(x); } public static void main(String[] args) { new...原创 2019-08-08 11:19:26 · 324 阅读 · 0 评论 -
static的应用:单例设计模式(Singleton)浅谈
单例(singleton):指的是单独的一个实例,实例指的就是对象的意思也就是说我们只想让类造一个对象设计模式通俗的理解就是套路,和数据结构类似,是独立于语言的。只是Java在设计模式用得比较频繁单例设计模式是设计模式中的一种new会调用构造器,调一次就产生一个对象,所以要把构造器的权限设置为private,否则就不止一个对象了单例设计模式有两种写法如何实现单例设计模式比如我们希望创...原创 2019-08-08 12:19:47 · 270 阅读 · 0 评论 -
多态的应用:模板方法设计模式(TemplateMethod)浅谈
他想做的是一个方法或者说一个功能,这个功能的体现就是一个模板解决的问题: 当功能内部一部分实现是确定的(确定的部分就可以用模板来理解,比如英语作文的模板,确定的部分就是框架,不确定的部分就是根据题目灵活进行发挥的内容,我们写作文的时候也是先构思好框架,再去写根据题目临时发挥的内容,不确定的部分就可以看成框架中的空格可以根据具体的问题去填,就相当于具体去实现了,实现的时候就把不确定的部分给确定...原创 2019-08-08 13:51:24 · 200 阅读 · 0 评论 -
包装类的使用
包装类的常用操作:public class Test { //测试Integer的用法,其他包装类与Integer类似 void testInteger() { // 基本类型转化成Integer对象 Integer int1 = new Integer(10); Integer int2 = Integer.valueOf(20)...原创 2019-08-08 15:14:58 · 79 阅读 · 0 评论 -
this的用法
对象创建的过程:创建一个对象分为如下四步: 1. 分配对象空间,并将对象成员变量初始化为0或空 2. 执行属性值的显示初始化 3. 执行构造方法 4. 返回对象的地址给相关的变量使用new会去调用构造器。this的本质: 创建好的对象的地址用法一:由于在构造方法调用前,对象已经创建。因此,在构造方法中可以使用this代表当前对象。public class User {...原创 2019-08-06 11:11:40 · 580 阅读 · 0 评论 -
方法的重写
子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。(方法的重载叫做overload)方法的重写需要满足下面的三个要求:1.“==”: 方法名、形参列表相同。2.“≤”:返回值类型和声明异常类型,子类小于等于父类。3.“≥”: 访问权限,子类大于等于父类。public class TestOverride { public static vo...原创 2019-08-06 11:55:24 · 132 阅读 · 0 评论 -
继承Thread类创建多线程
多线程: 一个线程就是一条执行路径,如果能把执行路径用一条线画出来就是一条路径,就是单线程,一条路径画不出来叫多线程一个Thread对象对应程序中的一个线程,JVM允许程序有多个线程 package test01;/** * 多线程的创建(不同于main) * 方式一:继承Thread类 * 1.创建继承Thread类的子类(这个子类就是线程了) * 2.重写Thread类中的ru...原创 2019-08-08 22:46:44 · 489 阅读 · 0 评论 -
Thread类中的常用方法
Thread类中的常用方法1.start():启动当前线程(即调用start方法的线程),并调用当前线程的run方法2.run():通常需要进行重写,将创建的线程需要执行的操作写在run方法中3.currentThread():是静态方法,这么用:Thread.currentThread()用来返回执行这一行代码的线程,返回类型为Thread4.getName():获取当前线程的名字5....原创 2019-08-08 23:15:19 · 3486 阅读 · 0 评论 -
线程的优先级
线程的调度:多个线程被CPU执行的时候涉及到CPU调度的策略,CPU正常采用的是时间片策略,我们也可以设置线程的优先级,CPU在切换线程的时候优先考虑优先级高的线程线程的优先级有十个档次:从1到10三个常量(定义在Thread类当中):MAX_PRIORITY:表示10MIN_PRIORITY:表示1NORM_PRIORITY:表示5(默认的优先级)获取和设置当前线程的优先级g...原创 2019-08-08 23:51:03 · 188 阅读 · 0 评论 -
Map接口
Map接口:存储双列数据:存储key–value对的数据,类似于数学中的函数的概念Map接口的实现类及关系:HashMap,LinkedHashMap(是HashMap的子类)TreeMapHashtable,Properties(是Hashtable的子类)关系:HashMap作为Map的主要实现类,线程不安全,效率高,可以存储null的key和value(两个都可以是null)H...原创 2019-08-13 18:14:03 · 107 阅读 · 0 评论 -
String
String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现.String是一个final类,代表不可变的字符序列,不可被继承。String实现了Serializable接口,表明字符串是支持序列化的实现了Comparable接口,表示String可以比较大小字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。String对象的字符...原创 2019-08-09 09:07:18 · 104 阅读 · 0 评论 -
基本数据类型,包装类和String之间的互相转换
基本数据类型,包装类转化成String方式一:连接运算基本数据类型(包括boolean)都可以这么做int num=10;String str=num+"";方式二:调用String重载的valueOf方法(形参是基本数据类型)(返回的是String)虽然形参是基本数据类型,但由于自动拆箱,包装类对象也可以充当float f=12.3f;String str=String.val...原创 2019-08-09 09:36:30 · 316 阅读 · 0 评论 -
HashMap的底层实现原理
HashMap在JDK7中的底层实现原理HashMap map=new HashMap();在实例化以后,底层创建了长度是16的一维数组,类型为Entry类型,Entry[] table用put方法put的数据,都是放在数组当中的,一个key-value构成一个Entrymap.put(key1,value1);这里说的是普通的put的操作,可能已经执行过多次put首先要知道放在数组中的...原创 2019-08-13 18:26:11 · 95 阅读 · 0 评论 -
调用运行时类当中的指定构造器
调构造器是用来造对象,最常用的还是newInstance的方式(调用空参的构造器),属性在调用属性给对象赋值newInstance更能利用反射的动态性,我们更希望用反射写出更通用的功能,通用即指的是适合于各种情况调用运行时类当中的指定构造器使用得比较少,因为并不通用。一般是针对某个具体的情况比如说我们想调用Person中的这个构造器 @MyAnnotation(value = "ab...原创 2019-08-18 15:56:48 · 164 阅读 · 0 评论 -
Lambda表达式
为什么使用 Lambda 表达式Lambda是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升Lambda表达式使用举例public class FieldTest { @Test public void test1() {...原创 2019-08-18 17:16:32 · 116 阅读 · 0 评论 -
多态性不适用于属性
public class Person{ int id=1001; public static void main(String[] args) { Person p=new Man(); System.out.println(p.id);//输出结果为1001,而不是1002 }}class Man extends Person{ int id=1002;}注意:...原创 2019-08-07 08:32:59 · 647 阅读 · 2 评论 -
单元测试方法的使用(JUnit)
背景:代码中已经测试的内容不想继续测试,想测某一块代码,就单独拿它测。单元测试的意思:想测试哪块代码,就单独测哪块代码Java中单元测试相关的API是JUnitJava中的JUnit单元测试操作步骤:1.选中当前工程点击右键2.点击Bulid Path,再点击Add Libraries3.选择JUnit,再点击Next,默认是JUnit4,就选它,点击Finish。在当前工程中出...原创 2019-08-07 09:37:35 · 477 阅读 · 0 评论 -
static关键字
静态方法: 使用static修饰的方法随着类的加载而加载,可以通过类名.静态方法名的方式进行调用类:静态方法(yes),非静态方法(no)对象:静态方法(yes),非静态方法(yes)静态方法中:只能调用静态的方法和属性非静态方法中:既可以调用静态的方法和属性,也可以调用非静态的方法和属性注意:在静态方法中不能使用this,super关键字属性和方法是否应该static?如何确...原创 2019-08-07 10:08:28 · 93 阅读 · 0 评论 -
throws+异常类型方式处理异常
throws+异常类型方式处理异常:throws+异常类型写在方法的声明处,指明此方法执行时,可能会抛出的异常类型一旦方法体执行时出现异常,仍然会在异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时就会被抛出。方法体中出现异常的代码后面的代码不会被执行。注意:运行时异常(RuntimeException)可以不用try-catch处理,也可以不用throws处理对比:t...原创 2019-08-07 10:52:16 · 450 阅读 · 0 评论 -
String与char[],byte[]之间的转换
String与char[]之间的转换char[]:字符数组String的底层是char[]String转换成char[]调用String的toCharArray()返回char[] String str="abc123"; char[] chars=str.toCharArray(); for(int i=0;i<chars.length;i++) { Syst...原创 2019-08-09 10:37:07 · 674 阅读 · 0 评论 -
String的拼接问题
说明:1)常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量String s="javaEE"+"hadoop";2)只要其中有一个是变量,结果就在堆中String s2=s+"hello";String s3="hello"+s;String s4=s2+s3;3)如果拼接结果调用intern()方法,返回值就在常量池中注意: String s1="jav...原创 2019-08-09 10:53:29 · 173 阅读 · 0 评论 -
LinkedHashMap的底层实现原理
因为是HashMap的子类,所以存储的时候还是用HashMap中定义的数组去做LInkedHashMap能够按照添加的顺序实现遍历public class Test { public static void main(String[] args) { Map map=new HashMap(); map.put(123,"AA"); m...原创 2019-08-13 20:41:53 · 390 阅读 · 0 评论 -
Map中的常用方法
添加、删除、修改操作: Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中 void putAll(Map m):将m中的所有key-value对存放到当前map中 Object remove(Object key):移除指定key的key-value对,并返回value void clear():清...原创 2019-08-13 21:28:36 · 708 阅读 · 0 评论 -
TreeMap
是按照key进行排序的,要求key是同一个类的对象不能按照value进行排序向TreeMap中添加key-value,要求key必须是由同一个类创建的对象排序方式,自然排序和定制排序自然排序调用空参的构造器即可通常在开发时,key,value都是固定类型的字符串实现了Comparable自然排序:public class Test { public static void...原创 2019-08-13 21:46:49 · 214 阅读 · 0 评论 -
Collections工具类
Arrays:操作数组的工具类Collections是来操作集合的工具类,操作Collection和Map常用方法:排序操作:排序操作:(均为static方法) reverse(List):反转 List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序,每次调用这个方法呈现出来的效果不一样 sort(List):根据元素的自然顺序对指定 List 集合...原创 2019-08-13 22:15:46 · 89 阅读 · 0 评论