Java
Java学习和实践
复业思维20240108
这个作者很懒,什么都没留下…
展开
-
Java 学习和实践笔记(52):二分法查找(折半检索)
第三步,如果该数等于这个中间数,那就找到了,返回位置索引。二分法查找(折半检索)又叫binary search.如果该数大于这个中间数,那么再对右边的数进行对半查找。如果该小于这个中间数,那么再对左边的数进行对半查找。第二步,将该数与排序后的数据集的中间一个数进行比较。重复第三步,直到找到为止。第一步,对数据实现排序。原创 2024-04-06 00:00:00 · 311 阅读 · 0 评论 -
Java 学习和实践笔记(51):基本的冒泡排序算法和优化的冒泡排序算法
基本的冒泡排序算法很简单,假定有10个数需要排序,那么就需要跑10轮,在每一轮里,都依次进相邻的两个数比较,如果右边的数比左边的数小,那么就将两个数交换位置,否则就不交换。这样比较的效果,就是每一轮,依次将最大、次大、次次大的数放到了右边,效果就像冒泡一样,所以叫冒泡排序。优化的冒泡排序算法,是增加一个判断条件,即如果在一轮排序后,发现没有发生过一次交换,那么下一轮就不再进行了,在上图中,也就是进行到第7轮时,就可以发现在第7轮,没有发生过一次相邻的数据交换,因此,就在这这一轮结束排序。原创 2024-03-31 00:00:00 · 352 阅读 · 0 评论 -
Java 学习和实践笔记(50):使用Comparable 接口确定对象根据什么属性来排序
例如,同样都是人,可以根据人的身高排序,可以根据人的年龄排序。因此,当对多个人进行排序时,就要事先确定好根据人的什么属性来排序。多个对象进行排序时,需要根据对象的什么属性来排序。使Comparable 接口,就是用来做这个的。原创 2024-03-30 00:15:00 · 340 阅读 · 0 评论 -
Java 学习和实践笔记(49):用javabean和一维数组的方式来存储表格数据
还是存储下面这个表格的数据,但使用另一种方法来做。原创 2024-03-28 00:00:00 · 253 阅读 · 0 评论 -
Java 学习和实践笔记(48):怎样用二维数组来存储表格数据?
怎样用数组的方式,来存储下面这个表格的数据?原创 2024-03-27 15:04:54 · 227 阅读 · 0 评论 -
Java 学习和实践笔记(47):二组数组的定义和内存分析
【代码】Java 学习和实践笔记(47):二组数组的定义和内存分析。原创 2024-03-26 00:15:00 · 111 阅读 · 0 评论 -
Java 学习和实践笔记(46):Arrays类的常用操作(数组的输出、排序、查找和填充)
Arrays类包含了:排序、查找、填充、打印内容等常见的数组操作。使用前先要导入这个类。本节主要讲的是一个单独专用于数组 操作的类——java.util.Arrays.上一节数组的遍历和复制,使用的是系统自带的方法。原创 2024-03-25 15:16:40 · 123 阅读 · 0 评论 -
Java 学习和实践笔记(45):数组的遍历,复制,
System.arraycopy(源数组,源数组起始位置,目标数组,目标数起始位置,要复制的元素数量)数组的复制,就是使用下面这个系统自带方法来进行。原创 2024-03-24 00:30:00 · 209 阅读 · 0 评论 -
Java 学习和实践笔记(44):数组的声明定义和使用以及初始化
【代码】Java 学习和实践笔记(44):一维数组的声明、定义和使用。原创 2024-03-23 00:15:00 · 294 阅读 · 0 评论 -
Java 学习和实践笔记(43):数组的四个基本特点和学习任务
其中,数组中的每一个数据称为一个元素。元素可以通过一个索引(下标)来访问它们。一,数组的长度是确定的:数组一旦被创建,它的大小就是不可以改变的了。四,数组变量属于引用类型,数组也是对象,数组中的元素相当于对象的。二,其元素的类型必须是相同类型,不允许出现混合类型。三,数组类型可以是任何数据类型,包括基本类型和。数组,在Java里,也是一个对象。原创 2024-03-22 00:00:00 · 243 阅读 · 0 评论 -
Java 学习和实践笔记(42):内部类(inner class)
对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。1)内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直。2)内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。不能访问内部类的内部属性。内部类只是一个编译时概念,原创 2024-03-21 00:00:00 · 446 阅读 · 0 评论 -
Java 学习和实践笔记(41):API 文档以及String类的常用方法
JDK 8用到的全部类的文档在这里下载:Java Development Kit 8 文档 | Oracle 中国原创 2024-03-20 00:00:00 · 262 阅读 · 0 评论 -
Java 学习和实践笔记(40):String类详解
如果打一个比喻,就类似object总类,就相当于我的电脑,然后下面的各个包,就相当于电脑的文件夹,实际的类就相当于文件夹里的文件。然后在这个总类下面,有系统自带的子类,以及用户自定义的子类。这些子类通过放在不同的包内,方便组织、管理和使用。可以说整个Java语言,就是关于类的定义、类的结构以及类的实现(对象)的描述。首先它是属于java.lang这个package(文件夹)内的一个类(文件),其次,它本身又通过import,引用了别的包里的类,定义自己。如下的String类,就展现了这个结构。原创 2024-03-19 00:00:00 · 319 阅读 · 0 评论 -
Java 学习和实践笔记(39):接口的多继承
前面学过,普通的类,只支持单继承,不支持多继承。但是接口却可以支持多继承。在上图中,销售经理可以同时继承管理人员和销售人员的特性。原创 2024-03-18 14:58:27 · 216 阅读 · 0 评论 -
Java 学习和实践笔记(38):接口中的静态方法
如果子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接从属于子类,可以通过子类名直接调用。这与方法重写是完全不同的,不要搞混了。JAVA8以后,我们也可以在接口中直接定义静态方法的实现——以前是不行的。这个静态方法直接从属于接口(接口也是类,一种特殊的类),原创 2024-03-17 00:00:00 · 225 阅读 · 0 评论 -
Java 学习和实践笔记(37):接口中的默认方法
上面的代码这样定义后,接口testDefault的实现类TestDefaultImpl01的对象td,就可以不仅使用重写的方法,也可以直接使用默认方法。默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。作为替代方式,接口可以提供默认方法的实现,所有这个接口的实现类都可以自动得到这个接口默认方法。允许给接口添加一个非抽象的方法实现,只需要使用。,这个特征又叫做默认方法(也称为扩展方法)。default关键字即可。原创 2024-03-16 00:45:00 · 157 阅读 · 0 评论 -
Java 学习和实践笔记(36):接口(interface)
比如:我定义一个接口Runnable,Car实现它就能在地上跑,Train实现它也能在地上跑,飞机实现它也能在地上跑。如果能把你要设计的模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。在接口这个特殊类里,不再像上一节讲的普通的抽象类一样,还可以在抽象类里另外定义普通属性或者普通方法,在接口里不再允许如此,只允许有抽象方法。接口就是一组规范,所有实现的类都要遵守。比如C++、Java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。原创 2024-03-15 00:30:00 · 222 阅读 · 0 评论 -
Java 学习和实践笔记(35):抽象方法和抽象类
2. 定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现,否则就不能通过编译!3.抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。1.使用abstract修饰的方法,没有方法体,只有声明。2.抽象类不能实例化,即不能用new来实例化抽象类。1.有抽象方法的类只能被定义成抽象类,否则报错!包含抽象方法的类就是抽象类。5.抽象方法必须被子类实现。4.抽象类只能用来被继承。原创 2024-03-13 00:00:00 · 221 阅读 · 0 评论 -
Java 学习和实践笔记(34):对象的转型(casting)
在这里,Animal是告诉编译器b的类型是什么,(其作用就类似int b的中int一样),所以b的类型是Animal,但是,new Dog() 造成的结果,就是b运行时,向下转型:向上转型后的父类引用的变量,只能调用它的编译类型的方法,不能调用它运行时的类型的方法。如果要调用,需要进行类型的强制转换。在上面的例子里,b就是向上转型后的父类引用的变量,Animal就是所谓的编译类型。//这就是向上转型(自动完成)对象的转型(casting)有两种,一种是向上转型,一种是向下转型。这就是向上转型的自动完成。原创 2024-03-12 00:00:00 · 176 阅读 · 0 评论 -
Java 学习和实践笔记(33):多态详解
这可以通过设想这种情况来理解:如果没有这种多态机制,要实现同样的效果,只能够分别调用子类对象来做,那么每次修改子类,TestPolym类都要同步做修改。多态(polymorphism): 不同的对象,调用同一个方法,对象的行为状态可能完全不同,也就是说,有多种状态,这种情况就叫做多态。以下的例子里,同样都是人吃饭这个方法,但是不同的人使用吃饭这个方法时,行为可能完全不同,也就是说,有多种吃饭状态。在上面的示例中,与多态有关的都是方法,而不是变量或属性,这很明显。//虽然在这里看到的是同一个shout方法。原创 2024-03-11 01:00:00 · 402 阅读 · 0 评论 -
Java 学习和实践笔记(32):封装简单使用规则以及示例
2)对类中方法:如果该方法只用于本类的辅助性方法,用private修饰,如果是希望其他类调用的方法用public修饰。1)对类中属性,一般设置成private 访问权限。也就是类中的属性或者说变量,都是定义成私有的,只在本类中使用。总结起来,实际上主要就只使用了private和public,至于default和proteted,则很少使用。2)像这种只有属性和set、get方法的类,有一个专用名称叫Javabean.1)set和get方法,可以使用generate自动生成。属性私有后,再提供相应的。原创 2024-03-10 00:45:00 · 273 阅读 · 0 评论 -
Java 学习和实践笔记(31):封装(encapsulation)
Java是使用“访问控制符”来控制哪些细节需要封装哪些细节需要暴露的。封装encapsulation一词来自于capsule,胶囊,小密器,密闭的空间。面向对象的三大特点:继承、封装、多态。前面学了继承,现在讲封装。“低耦合”∶简化外部调用,便于调用者使用,便于扩展和协作。“高内聚”︰封装细节,便于修改内部代码,提高可维护性。封装的理念:高内聚,低耦合。封装的实现—使用访问控制符。原创 2024-03-09 00:30:00 · 257 阅读 · 0 评论 -
Java 学习和实践笔记(30):继承树的追溯
构造方法第一句总是有一个隐含的 super(.),来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。如果没有,则依次往上上溯每个父类,查看每个父类中是否有h,直到Object,如果没找到,则出现编译错误。在最下面的子类Husky(哈士奇)中,假定要查找一个变量或者方法h,注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。上面步骤,只要找到h变量,则这个过程终止。首先,查找当前类中有没有属性h。如上图所示,在上图中,原创 2024-03-08 00:15:00 · 234 阅读 · 0 评论 -
Java 学习和实践笔记(29):super关键字的作用
中提到,子类可以重写父类的方法,当调用时,会优先调用子类重写的方法,父类的方法,就是就被覆盖了。这里就是可以通过super,来访问父类中被覆盖或者说被包住了的方法或属性。3.在一个类中,若是构造方法的第一行没有调用super(..)或者this(.);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。4.如上图示,外部的类,是不能通过super往上调各级父类的。2.使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。1. super“可以看做”是直接父类对象的引用。原创 2024-03-07 00:15:00 · 337 阅读 · 0 评论 -
Java 学习和实践笔记(28):equals方法的使用
如果在实践中,我们比较两个对象时,认为某一个属性相同时,就认为这两个对象相同,那么这个时候就不能直接使用默认情况下,需要重写equals()这个方法。因为不同的对象,总是有不同的地址,按原来的比较方法,是不可能认为两个对象相同的。默认情况下(也就是在Object类里的原始定义的方法),如果对象是基本类型,那么比较的是两个对象的值是否相等。如果声明了,那么Object类就变成该类的父类的父类的...类,该类也一样可以使用equals()方法。而Object类是所有类的父类,所有的。原创 2024-03-05 12:14:44 · 302 阅读 · 0 评论 -
Java 学习和实践笔记(27):Object类的基本特性、toString方法以及IDEA的部分快捷键介绍
1.Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法(注意拥有并不等于可以直接使用)2.如果在类的声明中未使用extends,则默认继承Object类。原创 2024-03-03 00:45:00 · 258 阅读 · 0 评论 -
Java 学习和实践笔记(26):组合(component)的含义以及与继承(extends)的关系
比如:上面的例子,Student is a Person这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。继承只能有一个父类,但是组合可以有多个属性。所以,有人声称“组合优于继承,开发中可以不用继承”,但是,不建议大家走极端。再比如:笔记本和芯片的关系显然是“has-a”关系,使用组合更好。2)通过第1点的作用,实现了代码复用。1)通过将父类对象作为子类的属性。原创 2024-03-02 00:30:00 · 240 阅读 · 0 评论 -
Java 学习和实践笔记(25):关键字final的作用
第三个:修饰类:修饰的类不能被继承,或者说不能被扩展。比如: Math、String等。例:final int MAX_SPEED = 120;第二,修饰方法:该方法不可被子类重写。例:final void study(){}第一,修饰变量:被他修饰的变量不可改变。例:final class A {}原创 2024-03-01 00:15:00 · 211 阅读 · 0 评论 -
Java 学习和实践笔记(24):方法重写(override)
这里的方法重写(overrride)是指子类可以遵循一定的规则,重写父类中定义过的方法(method),也就是子类可以用自身的行为来替换父类的行为。3.“>”: 在访问权限,子类大于等于父类,也就是说,当子类的对象在调用方法时,会优先调用子类中重写的方法,而不是去调用父类的方法。方法(method):就是几个语句的集合,又叫动作或行为,该类中的所有对象都可以使用。1.“= =”: 即子类中方法重写时,子类的方法名、形参列表必须与父类中的方法相同。第一种情况:子类中没有定义方法,直接使用父类中的方法。原创 2024-02-29 00:15:00 · 237 阅读 · 0 评论 -
Java 学习和实践笔记(23):继承(extends)的概念以及instanceof的使用
缺省没写时只不过是隐藏没有显示出来而已。比如没有如果定义一个类时,没有调用extends,则它的父类是: java.lang.Object。继承是面向对象编程的三大特征之一。继承让我们更加容易实现类的扩展。实现代码的重用,不用再重新发明轮子(don’t reinvent wheels)。,没有像C++那样的多继承。多继承会引起混乱,使得继承链。本节重点讲继承的概念以及instanceof的使用。除了父类的构造方法),但不见得可以直接访问(比如,1.代码复用,更加容易实现类的扩展。过于复杂,系统难于维护。原创 2024-02-28 00:15:00 · 322 阅读 · 0 评论 -
Java 学习和实践笔记(22):package(包机制)、JDK常见的包、类的导入
前面学的类,每创建一个类,在电脑上就是创建了一个对应的类文件。因为实际的程序,类可能有成千上万个,这样就需要把不同功能的类归放在不同的文件夹(package)里,这样,不仅便于管理,而且通过将同样名称的类放在不同的package里,也能解决重突的问题。如果要导入某个包下面所有的类,刚可以将该包下的类用*来代替,这样就表示导入该包下的所有类了。第二种,在类的开始处用import 写完整的包名和类名,这样就不需要用第一种方式了。上看起来后者是前者的一部分而已,实际如前所述,这是两个不同名字的文件夹而已。原创 2024-02-27 00:15:00 · 435 阅读 · 0 评论 -
Java 学习和实践笔记(21):变量的分类和作用域
成员变量如:局部变量如:原创 2024-02-26 14:41:24 · 130 阅读 · 0 评论 -
Java 学习和实践笔记(20):static的含义和使用
从图可以看到,普通的方法和对象属性,都在heep里,而static则在方法区里。static声明的属性或方法:静态变量,又叫类变量)、静态方法(又叫类方法)s。1) 为该类的公用变量,属于类,被该类的所有实例共享,在类载入时被初始化。静态变量/静态方法生命周期和类的生命周期相同,在整个程序执行期间都有效。3)一般用“类名.类属性(又叫类变量,变量=属性)/方法”来调用。4) 在static方法中不可直接访问非static的成员。static的本义是静止的。2) static 成员变量只有一份。原创 2024-02-25 00:15:00 · 380 阅读 · 0 评论 -
Java 学习和实践笔记(19):this的使用方法
1)在普通方法中,this总是指向调用该方法的对象。在普通方法中,它是作为一种隐式参数一直就存在着(这句话的意思,就是其实在普通方法中,编译器一直就在用它,只是没有显示出来而已)3)在构造方法的重载中,用this避免相同的初始化代码。这种用法中,this必须放在构造方法的第一句。2)在构造方法(即前面学习过的构造器)中,this总是指向正在初始化的对象。4)this不能用于static方法中。this用来指向当前对象的地址。原创 2024-02-24 00:15:00 · 248 阅读 · 0 评论 -
Java 学习和实践笔记(18):构造方法的重载
构造方法的重载很简单,就是我在创建完类后,可以在类中定义多种从类种创建对象的方法。如下所示,并且代码还可以利用右键菜单中的generate自动生成。原创 2024-02-23 00:15:00 · 132 阅读 · 0 评论 -
Java 学习和实践笔记(17):构造方法(构造器 constructor)
在每一个类创建完,编译器都会自动做一个无参的构造方法(没有显示出来),因为做了这个,所以new才能自动创建对象。第四步:返回对象的地址给相关变量,这句话就是指:s1= new Student();如果我不自定义构造方法,编译器也自定了一个无参的构造方法 Student(),以便后续创造对象实例。比如 :public class Student{比如 :public class Student{它只是用于指明对象的初始化,而不是创造对象。第一步:很简单,创建类时,成员的初始值都为0。最开始的id,就为0。原创 2024-02-22 00:30:00 · 415 阅读 · 0 评论 -
Java 学习和实践笔记(16):类的理解以及初始值
模板内的属性的具体内容可以变(比如在窗的这一列,不同行,可以有不同的数量的窗),但是这个模板一旦定义好就不会变。以房子为例,作为一个房子,它一定有相应的属性,比如房顶、墙、门、窗等等,把这些属性当作房子这个表格(如前所学,类就对应表格)的列。创建一个学生类,相当于创建了一个学生表,这个表只有表头,也就是只有各列的列名(属性),表本身是空的,没有行,也就说是还没有对象。具体到某一行,就对应一个具体的描述好的房子,这就是房子这个类里的一个对象,又叫实例,即object或者instance。原创 2024-02-21 11:47:33 · 367 阅读 · 0 评论 -
Java 学习和实践笔记(15):面向过程和面象对象其实很简单!
面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。”,就会发现列出1234这样的步骤,是不可能的。面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象。但是,具体到微观部分的操作时(就是微观部分怎样实现时),仍然需要面向过程的思路去处理。面向过程是一种“执行者思维”,解决简单问题可以使用面向过程。都是解决问题的思维方式,都是代码组织的方式。面向过程和面向对象的区别。原创 2024-02-20 14:45:47 · 279 阅读 · 0 评论 -
Java 学习和实践笔记(14):用表格来理解类、对象、属性以及动作(方法)很容易
一个表(结构)就对应一个类(结构)。所以凡叫什么类,自己就在心里把它叫什么表。如果表中的一列,在每一行上都相同,这种情况,在OOP里,就叫对象的动作或者类中的方法。OOP :面向对象编程,object oriented programming.表中的一列,换成OOP的叫法,就叫类的属性或者field.用表格就可以很好地理解类、对象、属性、以及动作这些概念。表中的一行,换成OOP的叫法,就叫做类中的一个对象。比如,这个雇员表,也可以叫做雇员类。原创 2024-02-19 16:02:46 · 254 阅读 · 0 评论 -
Java 学习和实践笔记(13):方法(method)的含义
方法(method):一段用来完成特定功能的代码片段,类似于其它语言的函数(function)。原创 2024-02-18 16:32:38 · 111 阅读 · 0 评论