Java面向对象
文章平均质量分 89
Willow_c
这个作者很懒,什么都没留下…
展开
-
Java反射
在反射包中,我们常用的类主要有Constructor类表示的是Class 对象所表示的类的构造方法,利用它可以在运行时动态创建对象、Field表示Class对象所表示的类的成员变量,通过它可以在运行时动态修改成员变量的属性值(包含private)、Method表示Class对象所表示的类的成员方法,通过它可以动态调用对象的方法(包含private),下面将对这几个重要类进行分别说明。也是同样的道理,都是获取Method对象所表示的方法的参数类型,其他方法与前面的Field和Constructor是类似的。原创 2022-09-04 16:13:16 · 91 阅读 · 1 评论 -
Java注解
当我们理解了内置注解, 元注解和获取注解的反射接口后,我们便可以开始自定义注解了。定义自己的注解}使用注解@Override}}}}用反射接口获取注解信息try {// 获取所有methods// 遍历// 方法上是否有MyMethodAnnotation注解try {// 获取并遍历方法上的所有注解}// 获取MyMethodAnnotation对象信息}}}}}测试的输出。原创 2022-09-04 16:04:42 · 71 阅读 · 0 评论 -
Java泛型
这种方法可以解决开始遇到的问题,编译器知道类型参数的范围,如果传入的实例类型B是在这个范围内的话允许转换,这时只要一次类型转换就可以了,运行时会把对象当做A的实例看待。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。在使用泛型的时候,我们可以为传入的泛型类型实参进行上下边界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。,因此泛型方法中的泛型T就被指明为User,因此变量obj的类型为User。类型的变量c,可以用来创建泛型类的对象。原创 2022-09-04 15:57:10 · 157 阅读 · 0 评论 -
Java I/O
Java 使用双字节编码 UTF-16be,这不是指 Java 只支持这一种编码方式,而是说 char 这种类型使用 UTF-16be 进行编码。Java 使用双字节编码 UTF-16be,这不是指 Java 只支持这一种编码方式,而是说 char 这种类型使用 UTF-16be 进行编码。ArrayList 中存储数据的数组 elementData 是用 transient 修饰的,因为这个数组是动态扩展的,并不是所有的空间都被使用,因此就不需要所有的内容都被序列化。原创 2022-09-04 15:48:44 · 71 阅读 · 0 评论 -
Java多线程
对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的 join() 方法,b 线程会等待 a 线程结束才继续执行,因此最后能够保证 a 线程的输出先于 b 线程的输出。可以说任务是通过线程驱动从而执行的。调用 wait() 使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其它线程会调用 notify() 或者 notifyAll() 来唤醒挂起的线程。在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。原创 2022-09-04 15:41:33 · 224 阅读 · 0 评论 -
Java集合
Java7 中使用 Entry 来代表每个 HashMap 中的数据节点,Java8 中使用 Node,基本没有区别,都是 key,value,hash 和 next 这四个属性,不过,Node 只能用于链表的情况,红黑树的情况需要使用 TreeNode。根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。其余方法大都是线性时间。原创 2022-09-04 15:25:41 · 151 阅读 · 0 评论 -
Java异常
// ...}原创 2022-09-04 15:00:17 · 44 阅读 · 0 评论 -
Java内部类
因为内部类依靠外部实例存在所以也是外部类的成员需要使用A.B来标识,但是还是会找不到,所以需要一个构造方法来传入外部类的实例来初始化内部类实例。这个时候Inner类是可以访问Outer类的private成员的,因为现在Inner也是Outer的成员,这里可以看到test()方法中的第一行 Outer.this.a 这里指的是外部类的成员,而this.a指的是当前类的成员。因为方法中的内部类作用域在里面,所以在外部是访问不到的,如果要返回一个InnerTest实例的话最好继承一个已经存在的类。原创 2022-09-04 14:44:36 · 71 阅读 · 0 评论 -
Java this super static final 关键字
比如当局部变量与成员变量重名时就可以定位到成员变量,注意参数这个时候也是也是这个作用域中的,所以如果不用this就单纯的是将传入的参数重新赋值了而已,但加了this就是指代的当前对象的成员,所有成员变量就会被赋值为传入的参数值。可以理解为是属于这个类,而不属于这个类的对象,当定义一个静态属性的时候会在内存中开辟一个共享区域,所以在内存中也只存在一份,静态变量供类的所有对象使用。this指代本类的对象也是一个指向本对象的指针,所以不可以在静态环境之中。super(参数1,参数2,......,参数n);原创 2022-09-03 20:47:37 · 118 阅读 · 0 评论 -
Java封装、继承、多态
被这个关键字修饰的类是抽象类、修饰的方法为抽象方法抽象类中可以没有抽象方法,但类中一但有了抽象方法后这个类必须定义为抽象类抽象类的抽象方法可以不用写出具体的实现,可以看作所有继承这个父类的共有方法(有这个行为但其实现却不一样,比如猫是喵喵喵叫,而狗是汪汪汪的叫,只需要定义一个抽象方法call()即可)。所以行为是子类根据自己独有的行为特征来分别实现的。在抽象类的这个问题中可能会发现一点问题,如果有一些动物的类可能不需要这个call()方法呢,但是要继承这个抽象类就不得不实现这个方法,如果不需要这个方法又要一原创 2022-09-03 14:50:13 · 537 阅读 · 0 评论 -
Java类和对象的使用
在上述代码中,当使用new关键字创建出对象后会有一个地址,然后将引用地址拷贝给对象person进行关联而在主方法第一句的虽然它整体是一个对象,但没有变量存取它的引用,后面就无法对它进行操作变量存在于栈中,而对象存在于堆中,所以内部是这样的,这些对象现在都是独立的对象超出了作用域也就没用了,这个时候由于Java垃圾处理机制,就会销毁这些对象还有一种情况就是将对象值引用赋值为null也会被销毁如果想在后面初始化的话,就这样直接放着也没事原创 2022-08-16 21:32:50 · 289 阅读 · 0 评论 -
JAVA类和对象
我们不能将一个具体的对象执委成一个类,例如一只狗不能将其称之为狗类,狗也有很多的品种,品种的不同,可能行为,属性等等也会有所不同,所以类只是共通属性和行为的一类事物,类其实可以看作是对象的载体而将这些封装起来也就成了一个类...原创 2022-08-16 21:34:01 · 182 阅读 · 0 评论