- 博客(27)
- 收藏
- 关注
原创 Java初学8-7-接口
在 Java 中,接口(interface)是一种特殊的抽象类型,用于定义一组相关的方法签名,这些方法没有具体的实现。这意味着接口中的方法不需要方法体,实现接口的类必须提供这些方法的具体实现。默认方法:从 Java 8 开始,接口可以包含具有默认实现的方法,称为默认方法,这允许在不破坏现有实现的情况下添加新方法。当继承的多个接口中还有同名的默认方法时,必须在继承的这个类中进行实现!无论该类是否是抽象类!另一个解决方案是将该类设置为抽象类后,在该类中将同名的默认方法设置为抽象方法,并在之后的子类中进行实现。
2024-07-28 16:49:00
876
原创 Java初学8.5-final
在Java中,final 关键字是一个非常有用的特性,它可以用来修饰类、方法和变量。final 的主要用途是使被修饰的对象成为“最终”的,即一旦被定义或初始化后就不能再改变。但是当final修饰的属性是静态属性时,即static修饰,则初始化的位置只能是在定义时或者在静态代码块中,在构造器中是不能为其赋初值的。final 修饰变量表示该变量的引用不可变,如果是基本类型则值不可变,如果是引用类型则引用指向的对象不可变(但对象的内容仍然可以改变)。防止变量被意外修改。不可继承:final 修饰的类不能被继承。
2024-07-27 10:26:39
372
原创 Java初学8.4-单例模式
在Java中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点来获取这个实例。// 第二次调用时,由于 b 已经被初始化,因此不会重新创建对象,直接返回现有的 b 实例。提供一个公共(public)的静态(static)方法,用于返回单例类的唯一实例。在类内部声明一个静态(static)成员变量,该变量持有单例类的唯一实例。将构造函数声明为私有(private),以防止从类的外部创建新的实例。// 如果 b 未被初始化,则创建一个新的实例并赋值给 b。
2024-07-27 10:26:09
331
原创 Java初学-8.3-代码块(实例初始化块/普通代码块和静态初始化块/静态代码块)
每当一个类的构造器被调用来创建一个新的对象时,该类中的实例初始化块(非静态的初始化块)都会被执行。这是因为实例初始化块是为每个对象的初始化服务的,它的目的是确保在构造器开始执行之前,对象的某些状态已经被正确地设置。与方法不同的是,代码块没有方法名,没有返回值,没有参数,只有方法体,而且不能通过对象或类显式调用,而是在加载类时或创建对象时隐式调用。在给定的代码中,main 方法创建了三个 CodeBlockTest03001 的对象,每个对象都会先执行实例初始化块,然后调用相应的构造器。
2024-07-25 16:58:56
1183
原创 Java初学-8.2-main方法
由于main方法是一个静态(static)方法,它可以直接访问所在类的所有静态(static)成员,包括静态方法和静态变量。但是,它不能直接访问非静态(实例)成员,如非静态方法或非静态变量,因为这些成员属于类的实例,而main方法在没有创建类实例的情况下就被调用了。main方法是程序的入口点,它是Java应用程序开始执行的第一个方法。当Java虚拟机(JVM)启动并加载了应用程序的主类时,它会查找main方法来开始执行。main:这是方法的名字,必须为main。即main方法是由JVM调用的。
2024-07-24 08:31:08
314
原创 Java初学-8-1--类变量和类方法(静态变量和静态方法)
但是,如果你有一个类的实例,你可以在类方法内部通过该实例调用成员方法。如果在子类中定义一个与父类中类方法相同签名的方法,那么这将被视为一个全新的方法,而不是对父类类中方法方法的重写。类变量:可以通过类名直接访问,即使用ClassName.variableName的形式,也可以通过对象实例访问,但由于它是共享的,这种方式访问的也是同一个变量。在类方法中,this关键字是不可用的,类方法不与任何特定的实例绑定,它们是与类本身相关的。成员方法可以直接调用类方法,因为类方法是与类本身关联的,不需要特定的实例。
2024-07-23 18:10:41
498
原创 Java初学-断点
在Java中,断点调试是一种常用的软件开发技术,它允许开发者暂停程序的执行,以便检查和修改程序状态。当程序执行到这里时,它将暂停,就可以检查x、y和z的值了。当程序运行到断点处时,它会暂停执行,此时你可以进行以下操作:查看变量值:观察并分析变量的当前值。日志输出:虽然不是断点调试的一部分,但在代码中添加临时的日志语句也是调试的一种有效方式。修改变量值:在某些情况下,可以直接修改变量的值,这对于测试特定条件下的行为很有用。条件断点:设置断点只在满足特定条件时触发,这可以通过在断点上设置条件表达式实现。
2024-07-22 16:07:26
430
原创 toString与finalize
这样,当你调用new Person("Alice", 30).toString()时,将返回"Person{name='Alice', age=30}",这比默认的toString输出更有意义。回收:当某个对象没有任何引用时,则JVM(即Java虚拟机)就认为这个对象是一个垃圾对象,就会使用垃圾回收机制销毁该对象。finalize方法是Java垃圾回收机制的一部分,它是一个特殊的方法,用于在对象被垃圾回收器回收之前执行一些清理工作。方法,子类可以重写该方法,做一些释放资源的操作。被销毁前会调用该对象的。
2024-07-21 20:40:24
297
原创 Java初学-Object类
重写 equals 方法:如果创建自己的类并希望使用 equals 方法比较对象的内容,应该重写 equals 方法。默认情况下,Object 类中的 equals 方法的行为与 == 运算符相同,即比较引用。Object 类是Java中所有类的基础,提供了核心的、通用的行为和功能。在Java中,Object 类是最基础的类,所有其他的类都是直接或间接地继承自 Object 类。如果创建了自己的类,并且想让这个类的实例能够通过equals方法进行有意义的比较,需要在类中重写equals方法。
2024-07-21 16:42:53
615
原创 Java初学-多态
当我们通过 makeSound 方法传递 Dog 或 Cat 对象时,实际执行的是这些子类重写后的方法,而不是 Animal 类中的方法。当我们通过父类类型的引用调用一个方法时,实际执行的是由引用所指向的对象类型所定义的方法,这就是动态绑定(dynamic binding)。然而,在讨论多态参数时,我们通常指的是后者,即方法重写,因为这直接涉及到对象的多态性和动态绑定。在Java中,多态数组是一个强大的特性,它允许你定义一个数组,其元素类型为某个基类(父类),但实际存储的是该基类的子类实例。
2024-07-19 10:38:49
1072
原创 Java初学-多态
在这个例子中,myAnimal是一个Animal类型的引用,但它实际上指向的是Dog类型的对象。在运行时,JVM 会检查 obj 引用的实际对象类型(运行类型),如果 Child 类重写了 method(),那么 obj.method() 调用的就是 Child 类中的 method() 方法,而不是 Parent 类中的 method() 方法。这里,x 是 A 类型的引用,尽管它实际上指向的是 B 类型的对象,但是当通过 x 访问 a 时,编译器会查找 A 类中的 a,而不会考虑 B 类中的覆盖版本。
2024-07-18 11:04:35
1107
原创 Java初学6-5 -重写
例如,如果父类的方法返回Object类型,那么子类重写的方法可以返回String类型,因为String是Object的一个子类。//Person01 类的 name 和 age 成员变量在构造函数中被初始化,并且在 say() 方法中被访问,这些都是在类的内部进行的,因此不需要 getter 和 setter 方法。//在say()方法中,Student01可以调用super.say(),因为say()是public的,允许子类访问父类的公共方法。//调用父类的say()方法。"Person.Say方法"
2024-07-16 10:44:46
268
原创 Java初学6.4
直接查找父类,子类即使有也不访问。不限于直接父类,可以一直向上查找,直到找到为止。有就调用,没有则找父类。Super代表父类的引用,用于访问父类的方法,属性,构造器。不限于直接父类,可以一直向上查找,直到找到为止。可以访问父类的属性,但是不能访问私有的属性!Java初学6-4 - super关键字。同样地,方法也遵循!
2024-07-15 16:33:49
412
原创 Java初学6.3
/隐藏了super();System.out.println("一个参数的构造器!//在创建子类对象时,无论使用的是哪个构造器,默认情况下总会调用父类的无参构造器。
2024-07-15 09:40:00
697
原创 Java初学6.2
封装:把抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据将被保护在内部。程序的其他部分只有通过被授权的操作(方法)才能对数据进行操作。//此时的输出不受if(age>=1&&age<=100)限制。当出现构造器时,直接的输出并不受到set方法中的判断条件的限制,要想使输出受到限制,必须在构造器中调用set方法。/* Person p2 = new Person("超级大帅哥",120,18000);封装的好处:隐藏数据的实现细节,并且可以对数据进行验证,保证数据的安全合理。
2024-07-13 09:30:31
687
1
原创 Java初学6.1
package 的作用是声明当前的类所在的包,需要放在class的最上面,一个类中最多有一个包。import指令的位置在package的下面。类定义的前面,可有有多个但没有先后顺序。区分相同名字的类,当类很多时,可以很好的管理类,控制访问范围。受保护级别:protected 对同一个类和子类公开。私有级别:private 只有类本身可以访问。包的本质就是创建不同的文件夹来保护类文件。java.lang.*默认引入,不需要引入。默认级别:无修饰符 向同一个包的类公开。java.util.*系统提供的工具包。
2024-04-16 21:27:05
471
1
原创 Java初学5.3.1
使用this关键字嗯可以引出当前对象的成员变量,成员方法和构造方法。访问构造器:this(形参列表);只能在构造器中使用,只能在构造器中访问其他构造器。this不能在类定义的外部使用,只能在类定义的方法中使用。注意:this关键字可以访问本类的属性,方法,构造器。this关键字用于区分当前类的属性和局部变量。注意:那个对象调用,this就代表哪个对象。访问成员方法:this。方法名(形参列表);//若不使用this时,输出为。姓名:null,年龄:0。姓名:嘻嘻,年龄:18。//this()调用。
2024-04-09 22:27:46
273
原创 Java初学5.3
若某个对象修改了静态成员变量的值,那么所有对象使用的都是修改后的值。一旦定义构造方法,默认的构造方法就会被覆盖,就不能再使用默认的构造方法,除非显式的定义:方法名(){}静态成员方法的调用可以直接调用也可以使用类名.静态成员方法名();使用final声明成员变量时,直接为常量,不能被改变,且变量名一般都大写。使用final声明成员方法时,该成员方法不能被重写。静态成员方法除使用本方法声明的局部变量外,只能访问静态成员变量。静态成员变量属于类,既可以通过类名访问,也可以通过对象名访问。
2024-04-08 22:45:32
730
原创 Java初学5.2
在方法值的传递中,若传递的数据类型为基本数据类型,那么传递的是真实的数据,形参的改变不影响实际参数的值,但如果是引用数据类型,那么传递的就是地址值,形参的改变影响实际参数的值。可变参数可以和普通类型的参数一起放在形参列表中,但必须是可变参数在最后。注意:方法局部变量是独立的,不会相互影响。Java允许将同一个类中多个同名同功能,但参数不同的方法,封装成一个方法,就通过可变参数实现。时,栈内一直开辟空间,此时n的值有n=4,n=3,n=2。此时会输出n=2,然后返到n=3,并输出,再返回到n=4,并输出。
2024-04-07 21:58:41
938
原创 Java初学5.1
在方法值的传递中,若传递的数据类型为基本数据类型,那么传递的是真实的数据,形参的改变不影响实际参数的值,但如果是引用数据类型,那么传递的就是地址值,形参的改变影响实际参数的值。之后还会有成员变量(静态变量,实例变量),成员方法(无static关键字)等的学习。在同一个类中,定义了多个同名的方法,这些同名的方法具有相同的功能。注意:在方法的调用中,实参与形参必须一一对应,否则程序报错。即同一个类中,方法名相同,参数不同方法,与返回值无关。形参:形式参数,在方法中定义的参数。实参:实际参数,方法调用中的参数。
2024-03-30 22:43:48
335
原创 Java初学4.1
数据类型[] 数组名=new 数据类型[]{元素1,元素2,......,元素n};([]内的值最大值为数组内元素个数减一!例如:int [] a=new int []{1,2,3,4,5,6,7};初始化时只指定数组的长度,由系统为每个数组元素指定初始值。数组指的是一种容器,可以用来存储同种数据类型的多个值。数据类型 [] 数组名=new 数据类型[数组长度];例如:int [] a=mew int[5];注意:一旦覆盖后,原来的数据就不存在了!例如:int [] a={1,2,3};
2024-03-28 22:18:03
155
原创 Java初学3.3
注意:for控制循环的变量,因为其归属于for循环的语法结构,因此再循环结束后将不能再被访问。而对于while来说,控制循环的变量不归属于while循环,因此循环结束后,仍然可以继续被访问。当case语句中没有break且没有default时,值符合case后的值时将会打印该case的语句体以及后面所有的全部,直到遇到break或}。首先执行初始化语句,其次,进行条件判断。若为true,则进行循环体,否则进行for循环后的其他语句。然后,执行条件控制语句,最后重回条件判断。while(条件判断语句){
2024-03-27 22:06:45
210
原创 Java初学3.2
计算规则:先计算表达式的值,若得到true,则结果为表达式1,若为false,则结果为表达式2。短路逻辑运算符:&&,||即左边的表达式能确定最终结果,那么右边将不参与运算。结果与||相同,但是其具有短路效果。结果与&相同,但是其具有短路效果。作用:可以进行判断,根据判断结果得到不同的内容。表达式1:表达式2;注意,表达式的结果必须被使用!
2024-03-25 20:54:31
201
原创 Java初学3.1
注意,byte,short,char三种类型的数据在运算时,是直接提升为int类型,在进行运算的。当加操作中出现字符串时,“+”变为字符串连接符,结果为前后数据的拼接,产生一个新的字符串。数字进行运算时,数据类型不一样不能进行运算,需要转成一样的数据类型,才能进行运算。注意,关系运算符的结果都是boolean类型的,即只有true和false两个值。赋值运算符“=”是双目运算符,其左侧的操作数必须是变量,不能是常量或者表达式。+,-,*,/,%(取模,取余)。
2024-03-24 22:26:18
137
1
原创 Java初学2.2
float(单精度浮点型):占用空间:4字节,共32位。使用float定义数据类型时需要在数据值的后面加F作为后缀(F不区分大小写)。long:占用空间:8字节,使用long定义数据类型时需要在数据值的后面加L作为后缀(L不区分大小写)。同样地,a为变量名,可以改变。input为创建对象时的变量名,随上方改变而改变。byte:占用空间:1字节,取值范围为-128~127.double(双精度浮点型):占用空间8字节,共64位。int:占用空间:4字节。
2024-03-23 21:08:56
200
1
原创 Java初学2.1
t:在打印时,将前面的字符串的长度补齐到8,或者8的整数。字符类型:使用单引号括起来的内容,且内容有且只能有一个。字符串类型:使用双引号括起来的内容称为字符串类型。布尔类型:只有两个值true和false,用来表示真假。/*会找距自己最近的*/,因此,尽量不使用注释的嵌套。文档注释(目前使用不到)/**注释信息*/null:使用时需要以字符串的类型出现。整数类型:不带小数点的数字。空类型:空值且值为null。多行注释:/*注释信息*/小数类型:带小数点的数。单行注释://注释信息。注释内容不参与运行。
2024-03-21 22:01:45
132
1
原创 JAVA初学1
这样,在CMD中无需手动切换到特定目录,只需输入相关命令即可调用已加入环境变量的应用程序。在CMD中频繁切换目录和寻找特定应用的问题,确实会觉得不如直接使用桌面快捷方式方便。实际上,随着对编程和操作系统理解的不断深入,上述列举的基础CMD命令可能会逐渐不再使用了,转而被更为高级和专业的命令或脚本替代。4.在“环境变量”窗口中,可以在用户变量或系统变量区域中新建或编辑现有变量。3.在“系统属性”窗口中,切换到“高级”选项卡,然后点击“环境变量”按钮。1.右键点击“此电脑”或“我的电脑”,选择“属性”。
2024-03-20 23:06:02
232
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人