Java基础
Taitres
这个作者很懒,什么都没留下…
展开
-
ArrayList的扩容机制
0->10的机制其实是,初始判断为空时设置minCapacity为默认值10,这样oldCapacity = 0, 0的1.5倍还是0,newCapacity便等于 minCapacity = 10.同样,如果需要的minCapacity ,在扩容1.5倍后仍然不能满足,newCapacity应等于minCapacity。如果需要的minCapacity 如17,在扩容1.5倍后仍然不能满足,newCapacity应等于17。一个一个加元素,0->10->10的1.5倍。原创 2024-03-21 21:46:10 · 259 阅读 · 0 评论 -
静态泛型方法
java 中泛型只是一个占位符,必须在传递类型后才能使用,而类在实例化的时候才传递类型参数。静态方法的加载先于类的实例化,也就是说类中的泛型还没有传递真正的类型参数,静态的方法的加载就已经完成了,它们在编译时期并不会引用类上声明的泛型类型参数。因此,在静态方法中,无法直接访问类上声明的泛型类型参数。如果需要在静态方法中使用泛型类型,可以将泛型类型参数声明在方法自身上,例如。原创 2024-03-20 20:41:50 · 405 阅读 · 0 评论 -
接口和抽象类有什么共同点和区别
著作权归JavaGuide(javaguide.cn)所有 基于MIT协议 原文链接:https://javaguide.cn/java/basis/java-basic-questions-02.html。抽象类可以有抽象方法,这些方法只有声明而没有具体实现,需要在子类中实现。子类继承抽象类时,必须重写抽象类中的所有抽象方法,否则子类也必须声明为抽象类。接口:如果接口中只包含抽象方法,则实现接口的类必须实现接口中的所有抽象方法。如果接口中包含默认方法或静态方法,实现类可以选择性地实现这些方法。转载 2024-03-20 15:04:58 · 13 阅读 · 0 评论 -
基本类型和变量
当虚拟机进行逃逸分析后,如果发现某个对象并没有逃逸到方法外部,即对象的引用仅在当前方法内部使用,那么就可以通过标量替换来将对象的成员变量拆分为标量值,然后在栈上分配这些标量值,而不是在堆上分配整个对象。这种优化可以减少堆内存的使用,提高程序的性能。这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。转载 2024-03-19 21:53:28 · 20 阅读 · 0 评论 -
封装、继承、多态
例如,小明同学、小红同学、小李同学,都共享学生的特性(班级、学号等)。继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。多态,顾名思义,表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例。原创 2024-03-19 21:33:03 · 301 阅读 · 0 评论 -
为什么父类方法访问修饰符为 private/final/static 则子类就不能重写该方法
在Java中,static方法属于类级别,这意味着它们与特定的实例对象无关,而是与整个类相关联。因此,static方法在编译时就确定了调用哪个方法,而不是在运行时根据实例对象的类型来确定。 由于static方法的调用在编译时就确定了,而不是在运行时确定,所以子类无法重写父类的static方法。子类可以定义与父类static方法同名的方法,但这只是在子类中隐藏了父类的方法,并不能称之为重写。private 修饰的方法是私有方法,只能在当前类中访问,子类无法访问到这个方法,更不用说重写了。原创 2024-03-19 20:40:18 · 240 阅读 · 0 评论