![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
文章平均质量分 83
java学习笔记
loyd3
不加微信捏
展开
-
【算法基础】算法的时间复杂度
此类问题有两种形式:1.循环主体中的变量参与循环条件的判断此类题应该找出主体语句中与 T(n)成正比的循环变量,将之代入条件中进行计算。int i = 1;i乘以2的次数正是主体语句的执行次数,因此有 2的t次方 ≦n,取对数后得t ≦ log₂n,则T(n)= 0( log₂n)。2.循环主体中的变量与循环条件无关此类题可采用数学归纳法或直接累计循环次数。多层循环时从内到外分析,忽略单步语句、条件判断语句,只关注主体语句的执行次数。递归程序一般使用公式进行递推。原创 2023-01-03 15:31:03 · 792 阅读 · 0 评论 -
【JAVA】多态简介&多态和构造方法
多态简介“多态”(Polymorphism)从另一个角度将接口从具体的实施细节中分离出来,亦即实现了“是什么”与“怎样做”两个模块的分离。利用多形性的概念,代码的组织以及可读性均能获得改善。此外,还能创建“易于扩展”的程序。无论在项目的创建过程中,还是在需要加入新特性的时候,它们都可以方便地“成长”。通过合并各种特征与行为,封装技术可创建出新的数据类型。通过对具体实施细节的隐藏,可将接口与实施细节分离,使所有细节成为“private”(私有)。扩展性见下例://: polymorphism/mus原创 2022-03-21 10:55:50 · 465 阅读 · 0 评论 -
【JAVA】 多态-下溯造型
下溯造型(Downcasting)因为在上溯造型时会丢失具体的类型信息,所以为了获取这些类型信息,也就是在分级结构中向下移动,必须使用 “下溯造型”技术。当然上溯造型肯定是安全的,因为基础类不可能再拥有一个比衍生类更大的接口。然而在进行下溯造型时则并不安全,举个例子说,一个几何形并不一定是圆,也有可能是三角形或正方形。所以为了保证安全,必须有办法保证下溯造型能正确进行。在某些语言中(如C++),为了进行保证“类型安全”的下溯造型,必须采取特殊的操作。但在Java中,所有造型都会自动得到检查和核实!所原创 2022-03-21 10:55:30 · 429 阅读 · 0 评论 -
【JAVA】 多态-上溯造型
上溯造型之所以叫作上溯造型,除了有一定的历史原因外,也是由于在传统意义上,类继承图的画法是根位于最顶部,再逐渐向下扩展由于造型的方向是从衍生类到基础类,箭头朝上,所以通常把它叫作“上溯造型”,即Upcasting。上溯造型肯定是安全的,因为我们是从一个更特殊的类型到一个更常规的类型。换言之,衍生类是基础类的一个超集。它可以包含比基础类更多的方法,但它至少包含了基础类的方法。进行上溯造型的时候,类接口可能出现的唯一一个问题是它可能丢失方法,而不是赢得这些方法。这便是在没有任何明确的造型或者其他特殊标注的情原创 2022-03-21 10:54:54 · 1197 阅读 · 0 评论 -
【JAVA】 final关键字
final关键字Java关键字final在不同语境意思会有稍微不同,但总的意思是“不能改变”(定义常量)。之所以要禁止改变,可能是要考虑:设计和效率。final数据final主要用于定义常量,常量的用处主要在两点:编译期常量(compile-time constant),永远不会改变运行期初始化的值,不希望改变对于编译器常量,编译器允许将常量封装到使用计算过程中。即,会在编译期进行计算,避免运行时(run-time)不必要的开销(overhead)。Java中,这类常数必须为原始类型,用关键字原创 2022-03-21 10:54:23 · 202 阅读 · 0 评论 -
【JAVA】 重用类-合成&继承
合成(Composition)(hasA)进行合成只需在新类里简单地置入对象句柄即可。//: SprinklerSystem.java// Composition for code reusepackage c06;class WaterSource { private String s; WaterSource() { System.out.println("WaterSource()"); s = new String("Constructed"); } public Str原创 2022-03-21 10:53:59 · 343 阅读 · 0 评论 -
【JAVA】 访问控制
访问控制(Access Control)访问控制(或实现隐藏implementation hiding)重写(rewrite)工作代码使其易读,易理解,好维护是重构(refactoring)代码的主要动力。而面向对象设计主要考虑的是:“将会改变的东西与保持不变的东西区分开”Java提供访问控制符(access specifiers)允许库的创建者指明什么内容客户程序员可以查看,什么不可以。包(package):库单元(library unit)一个包包含一组类,在单个namespace下组合在一原创 2022-03-21 10:53:23 · 318 阅读 · 0 评论 -
【JAVA】 清除:finalization和垃圾回收
清除:finalization和垃圾回收由于垃圾回收器只知道释放那些由new分配的内存,不知道如何释放对象的“特殊”内存。为解决这个问题,Java提供了一个名为finalize()的方法。finalize()的工作原理是:当垃圾收集器准备好释放对象占用的存储空间,首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。要记住:垃圾回收不是销毁Java中的对象并不一定会被当做垃圾回收过去原创 2022-03-14 10:39:12 · 418 阅读 · 0 评论 -
【JAVA】 对象
用句柄操纵对象虽说万物皆对象,但你操作的实际是指向对象的句柄。试着将对象想象成电视,句柄想象成句柄。只要你手中拿着遥控器(句柄Handler),你就能控制电视机(对象),想“换台”或“调声音的时候”,只要控制遥控器(句柄)就能控制电视(对象)了。当然,遥控器可以在没有电视机的情况下,独立存在;也就是说,句柄并不一定要连接一,每当创建一个句柄的时候都要进行初始化:String s=”asdf”;上例中,String可以用文本初始化必须创建所有的对象关键字new的意思是”使我成为一个新的对象”(“M原创 2022-03-14 10:36:39 · 211 阅读 · 0 评论 -
【JAVA】 方法重载
方法重载(overloading)就是同一个类中允许同时使用一个以上的同名方法,只要这些方法的参数个数或类型不同即可如:public static int add(int a, int b){ return a+b;}public static int add(int a){ return a;}当一个类中的多个同名方法满足以下条件时之一时,即实现了方法重载:a. 不同的参数个数b. 不同的参数类型c. 不同的参数顺序通过重载,可以在一个类中定义相同名称、不同参数的实现相同功原创 2022-03-14 09:10:54 · 225 阅读 · 0 评论 -
【JAVA】 赋值(别名)
赋值(assignment)赋值是用等号运算符(=)进行的。它的意思是**“取得右边的值,把它复制到左边”**(take the value of the right-hand side(often called the rvalue) and copy it into the left-hand side(often called the lvalue))。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性的空间来保存右边原创 2022-03-14 09:09:43 · 1229 阅读 · 0 评论 -
【JAVA】注释和嵌入文档
注释和嵌入文档(Comments and embedded documentation)Java里有两种类型的注释。第一种是传统的、C语言风格的注释,是从C++继承而来的。注释用一个“/*”起头,随后是注释内容,并可跨越多行,最后用一个“*/”结束。/* 这是* 一段注释,* 它跨越了多个行*/但请记住,进行编译时,/*和*/之间的所有东西都会被忽略,所以上述注释与下面这段注释并没有什么不同:/* 这是一段注释,它跨越了多个行 */第二种类型的注释也起源于C++。这种注释叫作“单行原创 2021-06-02 10:19:04 · 288 阅读 · 0 评论 -
【JAVA】 字段和方法
字段(fields)和方法(methods)数据成员(data members)(有时也叫“字段”)以及成员函数(member functions)(通常叫“方法”)成员变量public class Book { private String name; //定义成员变量}成员方法public String getName() { //定义方法 getName() int id = 0; // 定义局部变量 setName("Java"); // 调用类中的setName(原创 2021-06-02 10:13:05 · 462 阅读 · 0 评论 -
【JAVA】 抽象类和接口
抽象类和抽象方法抽象方法只有声明没有方法体,其语法如下: abstract void f()含有抽象方法的类叫抽象类,要被abstract修饰抽象类中可以没有抽象方法抽象类不能新建对象如果继承了抽象类并想要新建新类的对象,必须实现基本类的所有抽象方法(完成方法体)。如果没有实现,则衍生类也是抽象类,且编译器会强迫在类名前加abstract关键字见下图:见下面抽象类和抽象方法的例子://: Music4.java// Abstract classes and methodsimpo原创 2022-03-21 11:00:00 · 314 阅读 · 0 评论 -
【JAVA】 内部类
内部类将一个类定义置入另一个类中,这就叫做内部类。需要注意的是内部类和合成(composition)有着本质区别。创建内部类://: innerclasses/Parcel1.java// Creating inner classes.public class Parcel1 {class Contents { //内部类private int i = 11;public int value() { return i; }}class Destination {private S原创 2022-03-21 10:58:10 · 154 阅读 · 0 评论 -
【JAVA】 容纳对象 数组
数组的特点a) 数组将索引与对象关联在一起。b) 数组保存已知类型的对象,这样在查找对象时就不必强制转换结果。c) 数组可以是多维的,并且可以保存原始类型。d) 但是,一旦创建数组,就不能更改其大小。方法charAtpublic char charAt(int index)返回指定索引处的字符值。索引的范围从0到length()-1。序列的第一个字符值在 索引0处,下一个在索引1处,依此类推,用于数组索引。...原创 2022-03-21 10:56:53 · 145 阅读 · 0 评论 -
【JAVA】 容纳对象 列表 Lists
概述a) 列表和数组一样将对象和索引关联——因此,数组和列表是有序的容器。b) 要进行大量的随机访问,使用ArrayList;要在列表中进行大量插入和删除操作,用LinkedListc) 队列和堆栈的行为都有LinkedList提供d) 元素怎么插入就怎么保存ListInterface Listpublic interface List extends Collection介绍:有序集合(也叫做序列Sequence)。使用该接口可以精确地控制元素插入到List中的位置。可以通过下标访问和搜原创 2021-06-01 10:36:26 · 680 阅读 · 0 评论 -
【JAVA】 容纳对象 Set
总概a) 一个集合只接受对象每种类型中的一个。b) HashSet能最快的查找元素c) TreeSet按顺序排序元素d) LinkedHashSet按插入顺序保持元素e) 不能有重复的元素SetIterface Setpublic interface Set extends Collection介绍:该集合不包含重复的元素。更正式地是,Set不包含一对满足e1.equals(e2)的元素e1和e2,并且最多只有一个null元素。Set接口对于所有的构造方法和add, equals和 h原创 2021-06-01 10:35:52 · 298 阅读 · 3 评论 -
【JAVA】 容纳对象 映射 Maps
总概a) 映射将对象与其他对象关联。b) HashMap能快速访问,c) TreeMap将键按顺序排列,不如HashMap快d) LinkedHashMap保持元素的插入顺序,通过hashing达到快速访问。Mappublic interface Map<K, V>介绍:映射键到值的对象。map不能包含重复的键,每个键只能映射最多一个值。该接口取代了Dictionary类Map接口提供三种集合观(collection views),分别允许map的内容被看成是键的集合,值的集原创 2021-06-01 10:35:36 · 313 阅读 · 0 评论 -
【JAVA】 处理异常
处理异常java的基本哲学就是“格式糟糕的代码将不会运行”(badly formed code will not be run)。捕获错误最佳时机是在编译的时候(compile time),甚至是在运行程序之前。但不是所有的错误都能在编译的时候检测到。那么要在运行时通过某种规范让错误的发起者将适当的信息发送给知道怎么解决问题的地方。提高错误处理(error recovery)能很好地增强代码的健壮性。错误处理时每个程序的基本关注点,但在java中尤其重要,因为java的一大基本目标就是写程序组件供他人原创 2021-06-01 10:31:13 · 418 阅读 · 0 评论 -
【JAVA】关于String
简介String类是代表字符串。所有Java程序中的字符串文字,例如“abc”,都是String类的实例Strings是不变的,创建后值就不能改变。String buffer 提供了可更改的方法。因为String对象是不变的,所以可以共享。例如:Strng str = “abc”;等同于char data[] = {‘a’,’b’,’c’};String str = new String(char);Java为字符串连接运算符(+)和其他对象转换为字符串提供特殊支持。通过StringBuild原创 2021-06-01 10:30:57 · 174 阅读 · 0 评论 -
【JAVA】正则表达式
正则表达式正则表达式又称正规表达法,常规表达法(Regular Expression)。正则表达式使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,通常被用来检索,替换那些符合某个模式的文本,正则表达式通常有元字符和限定修饰符组成。使用正则表达式最便捷的方式是使用String类内置的功能(matches()),见下例:System.out.println(“-1234”.matches(“-?\d+”));正则表达式还能结合String的其他方法,比如:split(),例如:split(“\原创 2021-06-01 10:30:30 · 417 阅读 · 0 评论 -
【JAVA】 类型信息
类型信息(Type Information)运行类型信息(RTTI)允许在程序运行时找到并使用类型信息有两种形式的类型信息:“传统”RTTI:要求在编译时有所有可用的类型反射机制:只能在运行时获取并使用类信息为什么需要RTTI?举个例子,从数组中取出元素的时候,容器会根据泛型自动将结构转型为对应的类型。这是RTTI最基本的形式,因为所有的转型要在运行时检查以确保正确。RTTI的意义是:运行时,对象的类型被定义了。Class对象要理解RTTI在Java中是怎样运作的,首先要知道类型信息在运原创 2021-06-01 10:30:14 · 196 阅读 · 0 评论 -
【JAVA】 数据储存在哪儿
数据储存在哪儿有6个存储数据的地方注册表(Register):a) 最快的储存,直接存储在处理器中。b) 虽然数据表的数量及其有限,但注册表也是按需分配。c) 不能直接操作注册表,在系统中也看不见注册表存在的痕迹。堆栈(stack):a) 活动于常规RAM(随机访问存储器random-access memory)区域,但能通过堆栈指针获得处理器的直接支持。b) 速度和效率仅次于注册表。c) Java系统在创建系统的时候必须知道所有存储在堆栈中的数据的生命周期。d) 堆栈限制了程序的灵活原创 2021-06-01 10:16:29 · 1421 阅读 · 0 评论 -
【JAVA】 可变参数
可变参数(varargs)可变参数列表(variable argument lists)包含不确定的参数数量和参数类型,是一种更加灵活的语法既然所有的类都继承自Object,那么可以新建一个参数是Object数组的方法,如://: initialization/VarArgs.java // Using array syntax to create variable argument lists. class A {} public class VarArgs { static void p原创 2020-05-26 09:02:43 · 131 阅读 · 0 评论 -
【JAVA】 静态数据初始化
静态数据初始化无论创建多少对象,static都只有那么一片存储空间。不能对本地变量使用static关键字,只能对字段使用。如果静态的字段是原始类型(primitive)且没有被初始化,则该静态字段获得该类型的标准初始值。如果是某个对象的句柄,则默认初始值是null。正常初始化,和非静态字段一样。static何时初始化,见下例://: initialization/StaticInitialization.java // Specifying initial values in a class def原创 2020-05-25 10:01:55 · 320 阅读 · 0 评论 -
【JAVA】 构造器和初始化顺序
用构造方法保证初始化创建对象时,Java自动调用构造方法进行初始化,从而保证初始化构造方法的特点:构造方法没有返回值;构造方法的名称要与本类的名称相同。普通没有返回值的方法使用 public void methodEx()这种形式,构造方法不需要使用void关键字定义语法:public bood{//…构造方法体}在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也被初始化如果类中没有明确定义构造方法,编译器会自动创建一个无参默认构造方法(no-arg d原创 2020-05-23 08:23:51 · 329 阅读 · 0 评论 -
【JAVA】 枚举类型
枚举类型(Enumerated type)关键字enum例如//: initialization/Spiciness.java public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING } ///:~注意枚举类型的实例都是常量(包括NOT,MILD,MEDIUM,HOT,FLAMING)所以按照习惯用大写字母要使用enum,则要创建该类型的句柄,并将其分配给一个实例如:public class SimpleEnumUse {原创 2020-05-22 10:29:14 · 154 阅读 · 0 评论 -
【JAVA】 go-to & 循环中的标签label
goto关键字 & 循环中的标签labelgoto是汇编语言的程序控制结构的始祖:“若条件A,则跳到这里;否则跳到那里”。虽然goto是在源码级别的跳转,但是滥用给goto招致了不好的声誉。如果程序总是从一个地方跳到另一个地方,还有什么办法识别代码的流程。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,仍然能看出一些goto的影子。它并不属于一次跳转,而是中断循环语句的一种方法。之所以把它们纳入got原创 2020-05-21 08:47:46 · 544 阅读 · 0 评论 -
【JAVA】运算符总结
指数计数制(Exponential notation)在科学和工程学中,e指的是2.718在Java中e指的是10,按位运算符(Bitwise operators)按位运算符允许操作单个“比特”,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。按位AND运算符(&)若两个输入位都是1,则按位AND运算符(&)在输出位里生成一个1;否则生成0。按位OR运算符(|)若两个输入位里至少有一个是1,则按位OR运算符(|)在输出位里生成一个1;只有在两个原创 2020-05-20 08:23:58 · 136 阅读 · 0 评论 -
【JAVA】 造型运算符&转型
造型运算符(Casting operators)“**造型”(Cast)**的作用是“与一个模型匹配”。适当时,Java会将一种数据类型自动转换成另一种。例如,假设我们为浮点变量分配一个整数值,计算机会将int自动转换成float。通过造型,我们可明确设置这种类型的转换,或者在一般没有可能进行的时候强迫它进行(强转)。为进行一次造型,要将括号中希望的数据类型(包括所有修改符)置于其他任何值的左侧。例如:int i = 200;long l = (long)i;long l2 = (long)200原创 2020-05-19 14:20:07 · 134 阅读 · 0 评论 -
【JAVA】 字面值
当向程序中插入文字值时,编译器知道使用的类型。但有时类型是模糊的,所以要通过以文字值相关联的字符形式添加一些额外信息来指导编译器。见下例:public class Literals { public static void main(String[] args) { int i1 = 0x2f; // Hexadecimal (lowercase) print("i1: " + Integer.toBinaryString(i1)); int i2 = 0X2F; // Hexade原创 2020-05-18 08:19:52 · 93 阅读 · 0 评论 -
【JAVA】 关系运算符&短路
关系运算符(Relational operators)关系运算符生成的是一个“布尔”(Boolean)结果。关系真,生成true;若关系假,生成false。关系运算符包括小于(<)(less than)、大于(>)(greater than)、小于或等于(<=)(less than and equal to)、大于或等于(>=)(greater than and equal to)、等于(==)(equivalent)不等于(!=)(not equivalent)。原创 2020-05-17 08:17:57 · 207 阅读 · 0 评论 -
【JAVA】一元减号和一元加号&自动递增和自动递减
一元减号和一元加号操作符(Unary minus and plus operators)一元加号和二元加法的区别:一元运算符有且只有一个运算参数二元运算符有且只有两个运算参数例如 负号 - 1 ; 它只能运算一个数据加号 1+ 2 ;参加运算的只能是两个数据多或者少都出错 它是二元运算符一元减号(-)和一元加号(+)与二元加号和减号都是相同的运算符。根据表达式的书写形式,编译器会自动判断使用哪一种。例如下述语句:x = -a;编译器能正确识别下述语句:x = a * -b;//这样书写是原创 2020-05-16 08:37:36 · 1369 阅读 · 0 评论 -
【JAVA】基本类型总结
基本类型(primitive types)基本类型的变量直接获取值,放在堆栈中基本类型不可变更,这也是Java程序具有很好移植性的原因之一基本类型的大小如下图:数值类型(numeric type)都是有符号(sign)的Jave SE5 自动打包基本类型,如:Character ch = ‘x’;...原创 2020-05-13 08:33:19 · 155 阅读 · 0 评论 -
【JAVA】实用BigDecimal
常用构造方法BigDecimal(String)String 构造方法是完全可预知的:写入 newBigDecimal(“0.1”) 将创建一个 BigDecimal,它正好等于预期的 0.1常用方法:add(BigDecimal)BigDecimal对象中的值相加,返回BigDecimal对象subtract(BigDecimal)BigDecimal对象中的值相减,返回BigDecimal对象multiply(BigDecimal)BigDecimal对象中的值相乘,返回BigDeci原创 2020-06-10 13:27:54 · 133 阅读 · 0 评论 -
【java】实用Hibernate SqlMaker类 以及 增删查改实例
public class SqlMaker { private StringBuilder sql; //sql语句 private Map<String, Object> values; @SuppressWarnings({ "unchecked", "rawtypes" }) private SqlMaker() { this.sql = new StringBuilder(200); //默认是200 this.values = new HashMap(); }原创 2020-07-16 16:37:31 · 212 阅读 · 0 评论 -
【JAVA】 类型转换 积累整理
ArrayList转换为数组toArrayimport java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("a"); list.add("b");原创 2020-09-17 15:30:56 · 71 阅读 · 0 评论 -
【JAVA】根据汉字拼音首字母排序 不同类型处理
分页列表中进行排序个人对Page分页的理解首先是sql那边拿到列表数据(当前项目中是根据创建时间排序的)然后每次currentPageNo更改,都会按照列表的数据取出一部分显示如果取出后再进行排序,那只有当前页面是按拼音排序,做不到整理列表是按拼音排序的。所以思路是获取列表数据后,整个先按拼音排序后,再加分页到前端显示 @Override public Page<StarBankSupportDTO> queryBankList(Page<StarBankSup原创 2020-09-27 15:51:49 · 1699 阅读 · 0 评论 -
【JAVA】 错题集 更新到2020-11-18
题目1:下面所示的java代码,运行时,会产生()类型的异常int Arry_a[] = new int[10];System.out.println(Arry_a[10]);答案:ArrayIndexOutOfBoundsException解析:定义的数组长度为10,角标即为0-9;访问数组角标10会出现数组角标越界异常题目2:以下描述错误的一项是( )?程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的原则上讲,所有的对象都是在堆区上分配原创 2020-11-17 23:27:18 · 259 阅读 · 1 评论