![](https://i-blog.csdnimg.cn/direct/3e4291aa7fe94881823791a7a402c216.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
文章平均质量分 62
Java基础
柏箱
这个作者很懒,什么都没留下…
展开
-
Java断点调试
F7跳入方法,F8逐行执行代码,shift+F8跳出方法,F9resume执行到下一个断点。原创 2024-08-16 09:30:00 · 565 阅读 · 0 评论 -
Java_finalize
但这里会先输出“程序退出了” 是因为我们调用gc并不会立即执行finalize方法,而是所有语句结束后才会指向finalize方法。实际上,并不是当我们将bmw=null,立刻就执行finalize,在java里,有一套垃圾回收算法。当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。执行后只有“程序退出”了,没有我们重写的finalize方法里的那些东西。当对象被回收时,会自动调用,子类可以重写该方法,做一些释放资源的操作。现在就有我们重写的finalize里的东西了。原创 2024-08-15 10:00:00 · 148 阅读 · 0 评论 -
Java_hashCode,toString
哈希值的十六进制,就是将我们通过hashCode方法得到的值转化为十六进制。哈希值不能完全等价于地址,而是通过将对象的内部地址转化成一个整数来实现的。两个引用指向同一个对象,哈希值一样。两个引用指向不同对象,哈希值不一样。创建一个monster,并且使用object类里的tostring方法。aa3和aa的hashCode相同,因为它们指向相同的地址。这两个hashCode不同,因为它们指向不同的地址。包名+类名+@+哈希值的十六进制。会默认的调用tostring方法。,默认为输出对象的属性。原创 2024-08-15 09:30:00 · 247 阅读 · 0 评论 -
Java-==运算符和equals方法
类object是类层次结构的根类。每个类都使用object。作为超类。所有对象(包括数组)都实现这个类的方法。equal有平等的,相等的的意思。原创 2024-08-14 10:00:00 · 245 阅读 · 0 评论 -
Java多态的应用(多态数组,多态参数)
当我们试图直接调用teach和study方法时会报错,因为能调用什么方法是看编译类型,编译类型为Person,而Person类里没有teach和study方法,所以不能调用。解决方法是,可以使用instanceof方法来判断它的运行类型,再依据它的运行类型来进行向下转型,这样就可以调用这个运行类型的特定方法了。由于动态绑定机制,是什么运行类型,就调用那个运行类型的方法,所以可以运行我们想要运行的say方法。方法testWork,使用向下转型操作,可以调用worker和manager特有的方法。原创 2024-08-14 09:30:00 · 782 阅读 · 0 评论 -
Java动态绑定机制
如果子类中的sum被注释掉的话,调用sum时它会先去子类找,发现没有,就去父类找,父类中有一个geti方法,由于动态绑定,这个方法也会先去子类找,返回方法所在的类,也就是子类的i(值为20)与10相加后返回。如果子类的sum1也被注释掉,会调用父类的sum1,使用父类中的i,值变为20。原创 2024-08-13 10:30:00 · 464 阅读 · 0 评论 -
Java属性重写问题
倒数第二行那个是错误的,objPri的编译类型为Object,运行类型为Integer,而不是String,所以只能向下转型为Integer,而不能向下转型为String。这里base.count的值应该为10,因为属性的值要看编译类型,base的编译类型为Base,运行类型为Sub。使用b的display方法时,由于访问的是方法,看运行类型,b的运行类型为Sub,所以值为20。访问b.count时,因为count为属性,看编译类型,b的编译类型为Base,所以值为10。是否为某类型或者某类型的子类。原创 2024-08-13 10:00:00 · 473 阅读 · 0 评论 -
Java多态的向上转型与向下转型
比如这里的animal运行类型为cat,在调用eat方法时,尽管父类animal和子类cat中均有eat这个方法,还是会调用子类的eat方法。cat和animal此时都指向Cat类,但animal的编译类型为Animal而cat的编译类型为Animal,这就是为什么cat能调用Cat类里的特有方法。因为能调用哪些成员是由编译类型来决定的,因为animal的编译类型为Animal,所以它就一定不能调用cat的特有成员。比如这样就是向上转型,animal是dog的父类,这里让父类的引用指向了子类的对象。原创 2024-08-12 10:00:00 · 863 阅读 · 0 评论 -
Java多态快速入门
方法的多态是不同对象都有一个同名函数,我们通过不同的对象调用同名函数。原创 2024-08-12 10:00:00 · 463 阅读 · 0 评论 -
Java方法重写
父类返回类型为object,子类返回类型为string也行,因为string是object的子类。dog为animal子类,有一个方法也为cry,但里面输出的内容不一样。结果为小狗,而不是动物叫,说明子类的这个方法覆盖了父类的方法。子类的某个方法,与父类的同名,同返回类型,同参数。先返回父类的say方法,再加上自己的,各司其职。父类animal,有一个方法名字为cry。返回类型要么与父类相同,要么是父类的子类。这里体现super的好处,代码可以复用。尝试去分配一个更弱的访问权限。方法重写也叫方法覆盖。原创 2024-08-12 09:30:00 · 223 阅读 · 0 评论 -
Java-super关键字
super代表父类的引用,用于访问父类的属性,方法,构造器。原创 2024-08-10 10:00:00 · 406 阅读 · 0 评论 -
Java继承的本质
创建一个c对象,会最先进行c的无参构造,里面有一个this会调用c类的有参构造,有参构造里面有一个super会调用父类b的有参构造,b类的有参构造有一个被省略的super,所以会调用b的父类a的无参构造,输出我是a类,然后回到b类的有参构造,输出hahah我是b类的有参构造,再回到c类的有参构造,输出我是c类的有参构造,最后回到c类的无参构造,输出我是c类的无参构造。应按照如下规则:如果子类有name,那么就是子类的这个name,如果没有,就去这个子类的父类去找name,找到就返回值,没找到就继续找。原创 2024-08-10 09:30:00 · 422 阅读 · 0 评论 -
Java继承细节
默认会去调用父类的无参构造器,如果父类没有提供,就必须在子类的构造器中使用super去指定。子类继承了所有的属性和方法,但是私有属性不能在子类直接访问,要通过公共的方法去访问。所以这里的构造器里面必须使用super去指定父类的构造器。这里写了一个有参构造器后,默认的无参构造器就没有了。这里想要通过this去访问子类的构造器,是错误的。运行时,会先调用父类的构造器再调用子类的构造器。一定是先要执行父类的构造器再来执行子类的构造器。子类必须调用父类的构造器,完成父类的初始化。父类提供一个public的方法。原创 2024-08-09 10:00:00 · 456 阅读 · 0 评论 -
Java继承快速入门
通过extends声明继承父类即可。原创 2024-08-09 09:30:00 · 102 阅读 · 0 评论 -
Java封装
英文encapsulation有封装的意思。原创 2024-08-08 10:00:00 · 1014 阅读 · 0 评论 -
Java访问修饰符
受保护protected不能访问不同包,默认不可访问子类和不同包(只可以访问同类和同包),私有private只能访问同类。这时候n2就不可以访问了,因为n2为protected权限,不同包下不可以访问。公开权限public可以访问同类同包子类不同包。访问n4时会报错,因为n4为private权限,同包不可访问。只有默认和public能够修饰类。modifier是修饰符的意思。a与test是不同包下的。本类四中权限均可访问。原创 2024-08-08 09:30:00 · 401 阅读 · 0 评论 -
Java包
区分相同名字的类,类很多时可以很好的管理类,控制访问权限。原创 2024-08-07 10:00:00 · 480 阅读 · 0 评论 -
Java-IDEA快捷键
按上ctrl进行选择,可以选一个,也可以全选,按自己的需求来即可。输入alt+enter再回车两次即可自动导入所需要的类。ctrl+alt+l可以迅速让代码变得规范,整洁,美观。还可以通过ctrl + b快捷键定位某个类的方法的位置。6.查看一个类的层级关系 ctrl + h。可以看到它的默认按键为ctrl + y。原创 2024-08-07 09:30:00 · 126 阅读 · 0 评论 -
Jave-this关键字
this就 代表的是当前对象。this可以大概理解成“我的” ,比如我的书包,这里的“我的”就代表当前对象。this是一个隐藏起来的指针,存储的地址就是当前对象的地址或者说,它指向它自己。使用hashCode方法得到的可以简单看待为对象的地址,但它其实并不是对象的实际地址。实际上,hashcode是通过将不同的地址转化为相应的数字,可以确保不同的对象得到不同的数字。原创 2024-08-06 10:00:00 · 387 阅读 · 0 评论 -
Java构造器
目录1.构造方法/构造器基本语法 2.构造方法快速入门 3.构造方法的注意事项和使用细节 4.练习题 5.对象创建的流程分析 6.类定义的完善 构造器英文为constructor。 可以在创建一个对象时就指定他的年龄和性别。 类似于c++里的构造函数,与类名相同,没有返回值,在创建对象时会自动执行。 构造器也可以进行重载。 和c加加里的构造函数类似,与类同名,没返回值且不用写void,可以重载 一个类叫dogdog();是声明函数dog(){}是默认构造器如果不写构造器,会自动生成一个默原创 2024-08-06 09:30:00 · 384 阅读 · 0 评论 -
Java作用域
全局变量可以被本类使用,也可以被其他类通过对象调用而使用,局部变量只能在本类中对应的方法中使用,使用范围很窄。在类内但是方法外定义的变量是局部变量,有初始值0可以不赋初值,在方法内的是局部变量,需要赋初值。局部变量一般是成员方法里的变量。全局变量有默认值,局部变量没有默认值。局部变量与全局变量重名时遵循就近原则,同一个作用域内局部变量不可重名。局部变量不能加修饰词,修饰词就是protected,public等词。局部变量的代码块结束了,局部变量就没了。同名的局部变量可以覆盖同名的全局变量。原创 2024-08-05 10:00:00 · 275 阅读 · 0 评论 -
Java可变参数
int...表示接收的是可变参数,类型为int,可以接收多个int,nums可以当做数组来使用。上面的这三个方法,功能相同,参数数目不同,可以使用可变参数优化代码。同名同功能但参数不同的封装成一个方法。可变参数和普通的参数放在一起时要在最后。一个形参列表最多只能有一个可变参数。遍历nums数组,求和即可。可变参数放前面的话会报错。可变参数的实参可以为数组。可变参数的本质就是数组。原创 2024-08-05 09:30:00 · 532 阅读 · 0 评论 -
Java方法重载
形参列表不一样才能进行重载。原创 2024-08-04 10:00:00 · 457 阅读 · 0 评论 -
Java方法递归
简单来说,递归就是自己调用自己。例如:递归是在函数里自己调用自己。原创 2024-08-04 09:30:00 · 202 阅读 · 0 评论 -
Java成员方法传参机制
传入a和b时会创建一个新的栈空间,在swap函数执行完后,那个a和b就被释放了,而主函数里的a与b的值不变 (没有交换)。p指向null是将test200里的p指向null,主函数里的那个p并没有指向null。传引用数据类型,比如数组,类时,传的是地址,方法里改变了值,它主函数里的值也会改变。在方法copyPerson里传入了p,又创建了一个p2,复制了p的name和age。基本数据类型,传递的是值,形参的任何改变不影响实参。传递数组时,传递的是地址,所以会改变。创建了一个新的对象复制了之前的对象。原创 2024-08-03 10:00:00 · 454 阅读 · 0 评论 -
Java成员方法
类似于c语言里的函数。void表示没有返回值。一个方法最多有一个返回值,但如果我们要返回多个值怎么办呢?当需要返回多个值时,可以使用数组。原创 2024-08-03 09:30:00 · 426 阅读 · 0 评论 -
Java类和对象引入
创建了一个名字为Person的类,其里面有4个属性。原创 2024-08-02 16:13:18 · 658 阅读 · 0 评论 -
Java二维数组
换句话说,可以创建一个二维数组,在它里面有很多个一维数组的地址,但这些一维数组都没有被开辟空间。(int)(Math.randon() * 100)+ 1得到1到100的随机数。和一维数组一样,它也是从0开始的,所以3行4列其实是arr23。而arr【i】.length则指的是对应的每个一维数组的长度。里面的大括号不能去掉,不然就变为int了,而不是int[ ]这里的arr.length指的是arr这个二维数组的行数。二维数组里放的是多个一维数组的地址。可以创建一个列数不确定的二维数组。原创 2024-08-02 09:30:00 · 147 阅读 · 0 评论 -
Java数组反转,添加,排序,查找
排序分为内部排序和外部排序。原创 2024-08-01 16:15:41 · 319 阅读 · 0 评论 -
Java数组
可以存放多个同一类型的数据,是引用类型。原创 2024-08-01 16:15:30 · 470 阅读 · 0 评论 -
Java多重循环控制,break,continue,return
break可以直接使得循环结束。这里只会输出i = 0,i= 1和i = 2,因为i的值为3时就跳出循环了,所以4到10的i都不会出现。只结束本次循环,下次循环正常进行。return用在方法时代表退出方法,return用在main时代表退出程序。原创 2024-07-30 10:00:00 · 729 阅读 · 0 评论 -
Java——循环控制for,while,do...while
基本介绍:就是让代码可以循环的执行。原创 2024-07-30 09:30:00 · 304 阅读 · 0 评论 -
Java分支结构Switch
如果常量1匹配成功但没一个语句写了break,会从第一个语句执行到最后一个语句,甚至连default里的语句也执行了,如果在执行过程中遇到break则结束switch。default中语句是没有匹配的case时或者case前的语句满足了但没有break就会执行(见流程图)。如果执行语句1后没有break,则直接执行语句2,不会判断表达式的值是否等于常量2。可以自动转化成相互比较的类型,也能比较,比如int和char。如果一个都没有匹配上执行default。穿透,就是有的case后不写。原创 2024-07-29 10:00:00 · 458 阅读 · 0 评论 -
Java——分支控制(if,else)
一共有三大流程控制语句 ,分别是顺序控制,分支控制与循环控制。有三种,单分支,双分支,多分支。建议嵌套不要超过三层,可读性不好。原创 2024-07-29 09:30:00 · 843 阅读 · 0 评论 -
Java位运算
有小数参与运算,得到的结果是近似值,比如-10.4%3结果应该是-1.4结果却是-1.4的近似值。记忆方法:0旋转90度还是0 1旋转90度是负号代表负数。上面那个相当于8除以2再除以2,下面那个相当于3乘以三次2。现代的电子计算机技术全部采用的是二进制。计算机以补码的方式运算,运算结果是原码。负数反码是原码按位取反,但符号位不变。数字后面加d代表为double类型。三个大于号连一起是无符号右移。java中共有7个位运算符。两个大于号连一起是算术右移。每右移一位相当于除二。每左移一位相当于乘二。原创 2024-07-28 10:00:00 · 260 阅读 · 0 评论 -
Java进制,进制的转换
/编写一个main方法0b开头为二进制,常规的数字为10进制,0开头为8进制,0X开头为10进制。原创 2024-07-28 09:30:00 · 329 阅读 · 0 评论 -
Java标识符,键盘输入语句
大驼峰是所有单词的首字母大写,小驼峰是从第二个单词开始每个单词首字母大写。被java语言赋予了特殊含义,用做专门用途的字符串。不能用java关键字(已被java设计者使用)常量名所有字母都大写,每个单词下划线连接。规则是指必须遵守,规范是这样做更好。执行到next方法会等待用户输入。以后可能会作为关键字使用。用于接收用户输入的数据。大驼峰和小驼峰写法。原创 2024-07-27 20:27:38 · 193 阅读 · 0 评论 -
Java运算符
分为算术运算符,赋值运算符,关系(比较)运算符,逻辑运算符,位运算符,三元运算符。原创 2024-07-27 20:10:10 · 1358 阅读 · 0 评论 -
Java基本数据类型与String类型的转换
使用charAt方法即可,它可以 得到字符串的第一个字符。第二种方法是通过基本类型的包装类调用parsexx方法。知识点是字符串与数值相加会转化为字符串。答案是 n3 = 30和n5 = 8。使用+号和" "即可完成转换。原创 2024-07-25 10:00:00 · 191 阅读 · 0 评论 -
Java基本数据类型转化
第三题char和int和float里float精度最大, 所以右边是float精度小于double,所以可以从float转为double。第四题只要有byte,short或者char参与运算,都会自动提升为int类型,所以是int转为short,错误。字符类型可以自动转化为int所以第一个对 ,int类型精度比double小,所以第二个也对,会转化为80.0。第二题11为int,转为byte错误,但可以用小括号来强转为byte。第一题9为int,所以是将int转为short,是错误的。原创 2024-07-25 09:30:00 · 572 阅读 · 0 评论