JAVASE 第八式


循环优化代码外提 删除归纳变量 强度削弱



“==”:作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象

如果是基本数据类型,则比较的是值是否相等。

"equal":作用是判断两个对象是否相等,但一般有两种使用情况

1.类没有覆盖equals()方法,则相当于通过“==”比较

2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,

相等则返回true,如String

地址比较是通过计算对象的哈希值来比较的

hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,

对象不相等,hashcode()可能相等,哈希冲突

hashCode()的存在是为了查找的快捷性,用于在散列存储结构中确定对象的存储地址
如果两个对象 equals相等,则 hashCode()也一定相等

如果 equals方法被重写,则 hashCode()也应该被重写

如果两个对象的 hashCode()相等, equals()方法不一定相等
equals方法没有重写,比较的就是应用类型的变量所指向的对象的地址

首先要注意的是 (short)10/10.2*2,只是把10强转成short。有由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认是double,

而(short) (10/10.2*2)是把计算完之后的值强转成short


A. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

//正确,这里的所谓动态数组并不是那个“ 有多少元素就申请多少空间 ”的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。

----------------------------------------------------------------------

B. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

//正确,ArrayList是数组,所以,直接定位到相应位置取元素,LinkedLIst是链表,所以需要从前往后遍历。

-----------------------------------------------------------------------

C. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

//正确,ArrayList的新增和删除就是数组的新增和删除,LinkedList与链表一致。

-------------------------------------------------------------------------

D. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

//正确,因为ArrayList空间的增长率为1.5倍,所以,最后很可能留下一部分空间是没有用到的,因此,会造成浪费的情况。对于LInkedList的话,由于每个节点都需要额外的指针,所以,你懂的。

-------------------------------------------------------------------------


非静态成员只能被类的实例化对象引用,因此这里在静态方法中访问x会导致编译报错


Java的跨平台特性是因为JVM的存在,它可以执行.class字节码文件,而不是 .java源代码。

我们编译好的文件是以 .java后缀保存的看,编译器会自动帮我们生成一个标准的 .class字节码文件,JVM运行该文件,JVM也是一个软件,不同的系统平台JVM不同,但都可以实现标准的 .class字节码文件。

跨平台是JVM决定的,而JVM处理的是class字节码文件
write once,run everywhere值得是编译后的字节码可以跨平台执行,也就是class文件,而不是java源文件

A、JDK8开始,接口中可以定义有方法体的方法,方法必须被default和static修饰。除此之外,其他方法都是抽象方法。

B、Java的语法是单继承,但是继承可以传递。其实B更准确一点是只能有一个直接父类。

C、继承用extends,实现用implements。先继承后实现。

D、定义接口是interface 实现接口是implements



Java 语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,即包装类。对应的基本类型和包装类如下表:

基本数据类型

包装类

byte

Byte

boolean

Boolean

short

Short

char

Character

int

Integer

long

Long

float

Float

double

Double



1、如果是本类使用,可以直接就用静态变量名。

2、如果是其他类使用,可以使用类名来调用,也可以创建一个实例对象来调用。

3、如果静态变量所在的类是静态类,那么不管在本类里或者在其他外部类,都可以直接使用静态变量名。

重写Overriding是父类与子类之间多态性的一种表现,子类重写父类的方法

重载Overloading是一个类中多态性的一种表现。

如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型(重载和返回值的类型无关)


try-catch是必须在一起使用的,而finally是根据需要进行使用,一般用来关闭资源。


AOP的概念是Aspected Oriented Programming 面向切面编程。

好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。

它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注

实现AOP有几种方式:

1. Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承 MethodBeforeAdvice,MethodAfterAdvice等

2. Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口

3. 三使用标注(@AspectJ)实现AOP

AOP 和 OOP的区别:

1. 面向方面编程 AOP 偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。

2. 面向对象编程 (oop) 则是对业务分析中抽取的实体进行方法和属性的封装。

也可以说 AOP 是面向业务中的动词领域, OOP 面向名词领域。

AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。

AOP将散落在系统中的“方面”代码集中实现;

AOP有助于提高系统可维护性;

AOP是一种设计模式,Spring提供了一种实现;


jps:查看本机java进程信息。

jstack:打印线程的栈信息,制作线程dump文件。

jmap:打印内存映射,制作堆dump文件

jstat:性能监控工具

jhat:内存分析工具

jconsole:简易的可视化控制台

jvisualvm:功能强大的控制台

jinfo可以查看当前堆内存的分配情况,如年轻代多少,老年代多少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值