
java基础
文章平均质量分 81
谢家小布柔
这个作者很懒,什么都没留下…
展开
-
java中的多线程
首先我们新建一个类ThreadNew。原创 2024-12-29 14:31:52 · 622 阅读 · 0 评论 -
java中的继承
。原创 2024-12-29 14:31:45 · 671 阅读 · 0 评论 -
java中的多态
我们先来了解一个业务背景:请设计一个系统,描述主人喂养宠物的场景,首先在这个场景当中应该有“宠物对象”,宠物对象应该有一个吃的行为,另外还需要一个“主人对象”,主人对象应该有一个喂的行为,请看代码://宠物狗//主人测试类运行结果如下图所示: 以上程序编译和运行都很正常,输出结果也是对的,那么存在什么问题吗?假设后期用户提出了新的需求,软件可能面临着功能扩展,这个扩展会很方便吗?假设现在主人家里又来了一个宠物猫,那该怎么办呢?在以上代码的基础之上,新增了一个Cat类,来表示宠物猫,这个原创 2024-12-29 14:31:37 · 619 阅读 · 0 评论 -
java中的final关键字
这里以String类为例。原创 2024-12-29 14:31:29 · 304 阅读 · 0 评论 -
java中的抽象类
假设你的公司要进行招聘,招聘2名产品经理,10名程序员,现在让你和小A设计这个网站让报名人员填写基本信息。大概有两种设计方式----。小A的设计方法:但是我们发现这两个页面基本上内容是相同的,于是你的设计方法是这样的:我们将一些相同的信息都提取到一起我们把这个过程叫做----抽象。原创 2024-12-29 14:31:23 · 351 阅读 · 0 评论 -
Object类,所有类的父类
因为我们认为两个对象即使不是指向的同一块内存,只要这两个对象的各个字段属性值都相同,那么就认为这两个对象是同一个对象。可以认为利用哈希表也能起到一定的判重的作用,但是现实是可能存在哈希冲突,即使是两个不同的对象,他们的哈希值也可能相同,如何解决哈希冲突,这里就略略略了。如果两个对象的hashCode相同(存在哈希冲突),那么它们可能相同也可能不同(即equals比较可能是false也可能是true)如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相 同!原创 2024-12-29 14:31:13 · 536 阅读 · 0 评论 -
java中的对象包装类与自动装箱
答案就在Integet的valueOf()方当中,如果我们的数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。我们知道这个的执行过程中,最开始是一个叫javac的编译器将.java文件编译称为.class的文件,在这个过程当中我们写的程序。从上边的图当中我们看到了一个不寻常的现象,就是一个int类型的值赋给了对象类型的变量。原创 2024-12-29 14:31:01 · 290 阅读 · 0 评论 -
java中的接口
1.接口的方法默认是 public,所有方法都是抽象方法,在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。2.接口中的实例变量默认是 final 类型的,而抽象类中则不一定。4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定。接口回调:先有接口的使用者,后有接口的实现者。定义三个实现接口的类。原创 2024-12-29 14:30:50 · 190 阅读 · 0 评论 -
lamdba表达式
在数学中,函数是有输入量和输出量的一套计算方案,就是拿“数据做操作”在面向对象的编程中强调,必须通过对象的形式来做事情函数式思想则尽量的忽略对象的复杂语法,“强调做什么,而不是以什么形式去做”lambda表达式就是函数式思想的体现。原创 2024-12-29 14:30:42 · 392 阅读 · 0 评论 -
java中的反射
(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到类对象之后,再通过类对象进行反编译,从而获取对象的各种信息。(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。原创 2024-12-29 14:30:27 · 1121 阅读 · 0 评论 -
java浅拷贝和深拷贝
new的方式可以让每一个对象都是新创建的,他们之间互不干扰,但是new的方式在对象个数少的情况下勉强能够使用,在创建对象过多时,对系统的开销很大,所以不推荐这种方式完成。当user02任何值被改变的时候,user01也会被改变。同理,user01任何值被改变时,user02也会被改变。在java语言中,当我们需要拷贝一个对象的时候,常见的会有两种方式的拷贝;2.在user类当中增加。原创 2024-12-29 14:30:16 · 327 阅读 · 0 评论 -
java中的注解
①:注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。②:让编译器进行编译检查的作用,比如下边这个@Override注解是重写的意思,子类重写了父类的方法,但是改动了方法名,所以报错。。原创 2024-12-29 14:29:48 · 516 阅读 · 0 评论 -
java异常体系
用示意图表示如下:主要:finally 异常中总能执行的代码区final 用于定义常量的关键字finalize() 垃圾回收,该方法是系统调用,不用程序员手动调用。原创 2024-12-29 14:29:37 · 747 阅读 · 0 评论 -
java中的内存指向
我们来看一下代码:分析一下java的数据调用我们调用cat1的run()方法和cat2的run()方法,执行run()方法,然后在去操作我们的变量进行值得更改,最后我们输出每一个cat1和cat2的age值,我们会发现输出并不一致,那么这就说明了我们在内存当中至少有两个age变量,分别属于cat1和cat2,那么我们也可以以此推出cat3当中有一个age变量。原创 2024-12-28 16:35:39 · 753 阅读 · 0 评论 -
java中的构造器
3.我们的每一个类当中都有一个默认的不显示的无参构造器,当我们在这个类当中重写写一个构造器的时候,我们默认调用的就是我们显示的构造器。java中的构造方法是一种特殊的方法,用于初始化对象。java构造函数在对象创建时被调用。它构造时,即提供对象的数据。4.我们的构造器是没有返回值的,如果有返回值,即便你的方法名和类名相同那么也不是构造函数。2.当我们new对象时,new 后边的方法就代表着我们的构造函数。5.我们的类当中是有一个或一个以上的构造函数。修饰符 当前类 同 包 子 类 其他包。原创 2024-12-28 15:34:32 · 166 阅读 · 0 评论 -
java中的输入输出
在 Java 中,输入和输出(I/O)操作是程序与外部世界交互的重要方式。Java 提供了丰富的 I/O 类库,使得开发者可以轻松地读取和写入数据。除了从文件读取数据,还可以从网络流、数据库等数据源读取数据。Java 的 I/O 类库提供了丰富的接口和类,以支持各种读取输出场景。这些示例展示了 Java 中输入输出操作的基本用法。通过这些类和方法,开发者可以灵活地处理各种输入输出需求。读取输出通常指的是从文件或其他数据源读取数据并进行处理。方法用于读取文件中的一行数据,并将其打印到控制台。原创 2024-12-22 20:47:10 · 1350 阅读 · 0 评论 -
java字符串
*2.引用数据类型:**当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。原创 2024-12-28 15:28:55 · 774 阅读 · 0 评论 -
java中的位运算
因为位运算的运算效率比直接对数字进行加减乘除高很多,所以当出现以下情景且对运算效率要求较高时,可以考虑使用位运算。不过实际工作中,很少用到它,我也不知道为什么很少有人用它,我想应该是它比较晦涩难懂,如果用它来进行一些运算,估计编写的代码的可读性会不强,毕竟我们写的代码不仅仅留给自己一个人看。2.求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。原创 2024-12-22 20:33:51 · 373 阅读 · 0 评论 -
java运算符
在上面我们可以看到,在必要的时候,int类型的值将会自动的转化为double类型。在java当中允许这种数值之间的类型转化。在这样情况之下,需要通过强制类型转换实现这个操作,强制类型的语法格式是通过()当中给出的想要转化的目标类型。⑤:三目运算符:condition?④:java使用&&表示逻辑”与“运算符,使用||表示”或“运算符,可以在赋值当中使用二元运算,这是一种很简单的简写形式,例如、③:最后,还有经常使用的<、>、<=和>=①:检测相等性: ==原创 2024-12-28 14:08:15 · 411 阅读 · 0 评论 -
java中的数据存储
先看下图使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127]。因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-2^31, 2^31-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值。原创 2024-12-28 14:04:32 · 1015 阅读 · 0 评论 -
java前言
与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。**SDK:**书上的解释是不对的(翻译的课表不能很好的去解释) 涛哥写了一个程序,为了让别人去使用,他就写了相关的代码接口,写了程序样例,数据说明,注释说明,样例,这样别人在用的时候就可以直接拿来用了。原创 2024-12-28 13:52:22 · 862 阅读 · 0 评论 -
计算机的内存
但是如果我们用一个数据去存储,他就会存储在一个叶块当中,由于每个int类型的数据都只会占据大小相同的内存空间,我们计算机只会记录每个变量的开头的地址,根据数组当中每个基本类型数据的大小进行计算,取出相应的bit数据。我们在学习链表的时候有的时候会发现:链表的内存空间是连续的,但是这里的空间连续指定是我们叶块的地址连续,这是因为我们的操作系统内存分配在内存空间足够的情况下回尽量分配连续的内存空间。所以在空间足够的情况下链表的空间也是连续的,但是链表和数组不一样,数组是消耗的连续的内存空间。原创 2024-12-28 13:50:03 · 1085 阅读 · 0 评论 -
磁盘的基本使用
曾经我们要向给计算机输入数据进行预算,我们只能输入0和1这两个数字, 输出是以纸带的形式进行输出,在纸带上打眼的地方就代表着数字1, 在纸带上没有打眼的地方就是0,但是有一次呀人们发现电脑没有问题,但就是输出不对, 后来人们发现原来是一个小飞虫堵住了纸袋上的一个眼导致了错误的发生。数据的传输必然是一个闭合的电路。(举例):假如正电压产生的是2V,负电压也产生2V,我们默认让磁头拥有3V的电压,当他滑到正的时候就有5V电压,当他滑动到负的时候就只有1V的电压。原创 2024-12-28 13:46:08 · 494 阅读 · 0 评论 -
计算机底层结构
最早期的人类将自己养的牛羊的数量画在一根根的骨头上,假设我们用一条横线代表一头羊,随着人类生活越来越丰富,羊群的数量也越来越多,那么在骨头上画的线也就越来越多,数起来也就原来越麻烦,于是有些聪明的人就发现我们为什么不将每10个横线重新做一个标记,比如用一根竖线,这样我们数羊的时候我先数有几个竖线然后在数有多少横线。我们可以通过对逻辑开关的改造成 ,逻辑与,或,异或,与非,或非,异或非等门,然后将他们当成最基本元素不断的搭建就会形成了**加法器,**在计算机当中一切的计算的基础就来源于加法器。原创 2024-12-28 13:42:15 · 726 阅读 · 0 评论