- 博客(103)
- 收藏
- 关注
原创 Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)
如果实现了多个接口,多个接口存在相同名字的默认方法,子类就必须对该方法进行重写:(因为如果不重写的话,就不知道调用的是哪个接口的show方法)子类把从父类继承下来的虚方法表里面的方法进行覆盖了,这才叫重写,但是私有的,最终的,静态的是不会添加到虚方法表中,所以不叫重写。2. 实现事件监听器:内部类可以实现事件监听器接口,在外部类中注册监听器对象,当特定的事件发生时,内部类的方法会被调用。4. 实现迭代器:内部类可以作为外部类的成员,实现迭代器接口,可以用于遍历外部类中的数据结构。
2024-02-25 10:56:14 551
原创 Java 面向对象进阶 16 接口的细节:成员特点和接口的各种关系(黑马)
接口的成员变量默认是public static final的,因此可以直接通过接口名访问和使用。这样做的好处是,在实现该接口的类中,无需再次声明和初始化这些成员变量,可以直接使用。Java中接口中成员变量默认修饰符是public static final的原因是为了确保接口的成员变量都是公共的、静态的和不可修改的。- static修饰符使得接口的成员变量可以在没有实例化接口的情况下直接访问。- final修饰符确保了接口的成员变量是不可修改的,即常量。
2024-02-22 22:07:44 450
原创 Java 面向对象进阶 14 抽象类和抽象方法(黑马)
有两种选择:1、重写所有抽象方法;2、子类也是抽象类(推荐第一种)可以有构造方法:(作用:在创建子类对象时,给属性进行赋值的)
2024-02-22 20:05:19 349
原创 Java 面向对象进阶 13 包,final,权限修饰符,代码块(黑马)
但是不够灵活,因为可能有的不需要这个方法,但是仍会执行构造代码块里面的内容,可以使用以下两种方法代替构造代码块;将switch,case循环里面的1,2,3,4,5改为常量,增加可读性。3、执行机制:我们在创造类对象的时候时候会先执行构造代码块,再执行构造方法。如果当前方法表示的是一种规则,不希望被改变,那么就使用final去修饰。3、如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有;不希望被继承的时候,可以使用final去修饰类;核心:常量记录的数据是不会改变的;2、成员变量私有,方法公开;
2024-02-22 17:15:48 873
原创 Java 面向对象进阶 10 多态中调用成员的特点(黑马)
如果时Dog d = new Dog();那么就直接区子类找name,不会先去父类开始找,找不到再到父类去找;如果调用成员方法时,编译时发现父类没有该方法,就会标红。
2024-02-21 19:37:19 358
原创 Java 面向对象进阶 08 继承中构造方法的访问特点、this和super关键字使用总结(黑马)
关于this关键字的访问构造方法的解释:在为成员变量赋默认值的时候使用this(...),并且和super一样,必须在第一行,不然会报错。
2024-02-21 14:02:30 363 1
原创 Java 面向对象进阶 07 继承中成员变量,成员方法的访问特点(黑马)
对于重名的情况,没有关键字,那么就是就近原则,打印出的是ziShow;调用的是A的虚方法表里的method 1,和覆盖的method 2;调用的是B的虚方法表里的method 1,和覆盖的method 2;this.name 指的是Zi(在本类的成员变量去找)因为this是就近原则,super直接去父类找。下面涉及到了重写,需要加上@override;super.name 指的是父类中的Fu;这种情况打印出来的结果是Zi。打印结果为:zishow。这种情况打印的是Fu。
2024-02-20 20:52:51 546
原创 Java 面向对象进阶 06 子类到底能继承父类中的哪些内容(黑马)
子类如果继承父类的构造方法,那么构造方法的类名和子类的类名不一样,所以父类构造方法不能被子类继承。构造方法是用于创建对象并初始化对象的特殊方法,它在创建对象时自动调用,并且由于构造方法与类名相同,因此不能被子类继承。子类只能继承父类的非私有成员变量和非私有方法,但构造方法不属于类的成员变量和方法,所以子类无法继承父类的构造方法。每个类都必须有自己的构造方法来初始化自己的对象。然而,子类可以通过调用父类的构造方法来初始化父类的成员变量,使用super关键字来调用父类的构造方法。这样的操作可以在子类中创建父类的
2024-02-19 22:46:04 1861
原创 Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)
案例代码如下:非静态的方法虚拟机会自带一个关键字,如下:但是不能手动出来,它的类型就是当前类;通过输出this,得到当前s1,s2 的地址;所以在输出时会有隐藏的this,所以this所指向的s1 的名字,年龄,和老师年龄。由于方法里面没有与成员变量重名,所以可以不写this;如果添加show2 方法,那么在程序运行的时候,this.show2();就代表,s1调用show2,和s2 调用show2;
2024-01-31 22:26:19 873
原创 Java 面向对象进阶 02 static 静态方法和工具类(黑马)
【代码】Java 面向对象进阶 02 static 静态方法和工具类(黑马)
2024-01-31 20:57:11 387
原创 Java 面向对象进阶 01(黑马)
在执行main方法的第一个语句时,是用类名调用了Student方法中的静态变量teacherNmae并赋值为阿伟老师,用到了Student这个类,所以就会把Student类的字节码文件加载到方法区,并在内存中创建了一个单独存放静态变量的空间,即为静态区。静态区随着类的加载而加载,只有new关键字执行了才有对象,所以静态变量优先于对象而存在的。在jdk8之前,静态区在方法区里面,在jdk8以后就存存放在了堆里面。在堆中创建的空间,存储的是所有的非静态成员变量;在不同的场景下,思考是否可以共享;
2024-01-30 22:10:08 759
原创 Java 学生管理系统
java中的system.exit(0)表示程序正常退出的意思。在程序执行过程中,如果某个条件满足需要立即终止程序的执行,可以使用system.exit(0)来实现。其中参数0表示退出码,0表示正常退出,非0表示异常退出。调用system.exit(0)会终止当前正在执行的线程,并且关闭所有的非守护线程。输入的String类型,可以提高容错性,输入abc也可以,下面Switch case循环的 1 为字符串类型,要加双引号;循环遍历与判断id是否存在重复,所以,可以通过调用getIndex方法,进行简化。
2024-01-30 20:11:27 670
原创 Java 集合 04 综合练习-查找用户是否存在
注意点:带有返回值的方法在返回值返回后,会立即结束该方法的执行。任何在返回值后面的代码都不会执行。这是因为返回值是方法的结果,一旦返回结果,方法的任务就完成了,没有必要继续执行后续的代码。视频代码:直接在contains方法中调用getIndex方法,这样不用再写一次循环。javabean代码一样。
2024-01-29 20:17:58 747
原创 Java 集合 03 综合练习(黑马)
原因是:第一次创建学生对象后,地址是0x0011,将zhangsan 23复制进去后,存储到集合中,接下来并没有再次创建对象,所以还是对同一个对象赋值,变为lisi 24,再将0x0011放进集合中,最后输入的是wangwu 25,仍然是对这个对象赋值,所以,存入集合中的是三个一样的地址都是0x0011,所以指向的都是同一个对象,所以输出的都是wangwu 25;在没有重写toString()方法的情况下,toString()方法返回的是对象的地址值。问题1、没有执行添加的循环,最后集合长度为0;
2024-01-29 19:14:02 500
原创 Java 字符串 10 字符串相关类的底层原理
在jdk8之前,使用StringBuilder,先创建一个StringBuilder 对象,把s1放进去,再把s2放进去,最后再通过toString,创建一个String对象,然后再创建一个StringBuilder 对象,把刚才ab放进去,再将s3放进去,最后再通过toString,创建一个String对象,至少创建四个对象。s2右边没有变量,所以在编译的时候,触发了优化机制,所以在运行的时候,直接复用串池里面的abc,所以地址是一样的,所以为ture;但是预估也需要时间,所以,要避免直接+;
2024-01-27 17:38:54 434
原创 Java 字符串 08 StringBuilder
当我们使用 StringBuilder 进行操作时,每次操作都是在原有的字符串上进行修改,而不会创建新的字符串对象。StringBuilder 是一个可变的字符序列,它可以进行字符串的添加、删除、修改等操作,而 String 是一个不可变的字符序列,一旦创建就不能修改。反转元素:在容器内部直接发生了反转,和字符串不一样,字符串本身不呢个改变,需要有返回值去承接,而这个是直接改变了容器内的东西。输入abc,从b截取到末尾,就是bc,没有A, 则不替换,再获取长度,等于2;
2024-01-27 15:25:12 389
原创 Java 字符串 07 练习-手机号屏蔽、身份证号信息查看,游戏骂人敏感词替换
将字符串里面的是数字的字符转换为数字运算,用id.charAt()获取单个字符,然后通过ASC||码表里面对应来运算,注意点:只有返回值才是被截取的小串,所以需要有一个变量去承接它;’0‘是48,’9‘是57;
2024-01-27 11:18:47 484
原创 刷题总结 1.25 1.26(有没看懂的题)
例如在广义表中 LS={1,{2,3},4} 中,表头为1,表尾为{2,3}和4组成的子表,即{{2,3},4}。广义表可以包含数据项和子广义表,数据项可以是任意类型的数据,而子广义表则是一个嵌套的广义表。例如,(1, 2, 3) 是一个包含三个整数元素的列表。因为链表是有序的,所以可以使用归并排序的思想,将链表拆分成两个更小的链表,然后分别进行排序,最后再合并成一个有序链表。head[tail[tail[K]]]的值为(p,(q,s)),再应用tail,得到(q,s),再应用head,得到q。
2024-01-26 21:49:48 713
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人