从java1.5依赖提供了一个我很喜欢用的功能Foreach功能,方便使用,简单,等等好处就不一一列举了,具体实现原理是什么就不大懂了,没有做过压测,所以具体性能如何,也不得而知,只是看网上同仁又说性能不及普通的for循环,当然这里提一提的主要原因在于问题,说呢,有人在用foreach做迭代的时候发现如果对集合类做了remove操作之后会报异常,这一点估计跟他的实现原理有关系吧,所以我的方式就是规避(),所以果断对于有remove操做的集合使用Iterator之后使用while循环来处理。
好了,开始今天的正题。
switch 功能,说实话习惯了用if这个到真心用的不多,至少目前用的不多,经历了不同的版本变迁后switch也发生了不少变化,从1.5开始增加了enum类型,1.7开始支持了C#中才有的string类型(其实个人感觉既然string都是静态不可变类,支持应该是一开始就该有的功能啊)。
在java的方法重载中有一点很容易犯,而且是不小心犯,以前没注意,知道遇到了,百思不得妻姐后才明白。在java中我们知道在方法重载的时候只要参数列表不同,就OK了,那么出现function a(int a),和function a(long b)这种一点都不稀奇,可是在你传递参数的时候就有问题了,因为如果你给的是一个int值,那么这两个函数应该来说都可以调用的,所以你让系统郁闷了一把。所以对于有类型升降的参数一定要注意,这里当然指的不只是基本类型了,复杂类型的多态也是要注意的哦。
顺带提一下,有人问为什么返回值类型不能作为区分两个方法重载的条件,这里借用别人的观点,方法的返回值也许在你定义的时候你知道返回值是不同的,但是真正的作用体现在他被调用的时候,所以这时候方法是按照你的方法所在类找到对应的类,然后再找方法同名的,接下来根据传递参数找到对应的方法,如果你在奢望他知道要通过返回值理解调用哪个方法,那就之能通过执行结果来判断了,那系统最笨的办法就是有多少种这种方法就调用多少次,完事了跟你的执行期望来判断需要那个执行的结果,但是这还是一个理想状况(尽管这已经很扯淡了),如果你压根没想要返回结果,那系统就彻底傻眼了。所以代码的执行不能期望系统通过执行结果来判断应该调用哪个,那就成了“因为有了鸡蛋,所以这肯定是鸡下的”。
通常情况下我们很少关注方法如何区分是哪个实现类来调用的,比如下面的
public class Test2 {
int i = 0;
public Test2(int i){
this.i = i;
}
public void test(){
System.out.println(i);
}
public static void main(String[] args) {
Test2 t1 = new Test2(1);
Test2 t2 = new Test2(2);
t1.test();
t2.test();
}
}
上面的代码中我们创建了t1,t2,按照之前的理解,在执行t1.test()的时候,先找到了Test2这个对象,然后找到对象的方法,接着执行,这里就有点问题了,那他怎么知道自己是那个实例在调用他执行的呢?
查看class文件我们可以找到具体的执行中有一段
可以看到执行的时候依然使用的是:package.class.method.区分的地方正在于aload_1[t1],这里的解释又说method实际上是将对象本身也作为参数传递近了方法,所以方法就知道是那个实例调用了他,比如:package.Test2.test(t1)
具体是否这样不太清楚,不过这样倒是能解释通。使用this或者super调用构造函数的时候要注意,都必须放在行首,否则执行会有问题。
- 大小: 33.9 KB
分享到:
相关推荐
java编程思想-初始化与清理了解this之后,你就能更全面地理解“静态(static)方法”的含义。静态方法就是没有this的方法。在“静态方法”的内部不能调用“非静态方法”,反过来倒是可以的。而且你可以在没有创建...
Java的初始化与清理是编程过程中至关重要的环节,它关乎到程序的正确运行和资源的有效管理。本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即...
6. **API使用**:FCKeditor提供了一套详细的API,开发者可以通过调用这些API方法来控制编辑器的行为,如初始化编辑器、设置默认样式、禁用某些功能等。 7. **安全性**:在使用FCKeditor时,必须注意XSS(跨站脚本...
Java初始化和清理是Java语言中非常重要的两个过程,它们确保了Java程序的正确运行和资源的有效管理。Java的初始化包括类的加载、连接和初始化三个过程,而清理则主要指垃圾回收机制。 首先,Java初始化的主要特性...
初始化和清理是编程中至关重要的概念,特别是在Java这样的高级编程语言中。本节主要讨论了Java中的构造器、成员初始化、对象创建过程、垃圾回收以及垃圾回收器的工作原理。 4.1 构造器 构造器是Java中用于初始化新...
Java编程思想中的初始化与清理是编程过程中的关键环节,它涉及到类的实例化以及对象生命周期的管理。在Java中,构造器(Constructor)是确保对象初始化的重要工具。 1. **构造器确保初始化** - 构造器是与类同名的...
《Java编程思想》第五章主要讨论的是对象的初始化与清理,包括构造器的使用、方法重载以及默认构造器的概念。下面将详细阐述这些知识点。 ### 一、构造器确保初始化 1. **为什么要引入构造器**:在Java中,构造器...
本章“第五章 初始化与清理”可能详细探讨了这两个重要概念,特别是在软件工程和系统设计中的应用。下面将根据标题和描述,结合常见的初始化与清理实践,来阐述相关知识点。 初始化是程序启动时执行的一系列操作,...
1. 初始化**LocalDevice**,获取当前设备的信息。 2. 设置设备的可见性,以便其他设备可以发现。 3. 创建**DiscoveryAgent**实例,启动设备搜索,找到目标远程设备。 4. 通过**RemoteDevice**获取远程设备的**...
Servlet API还提供了各种监听器接口,如`ServletContextListener`、`ServletRequestListener`等,它们可以在特定事件发生时执行代码,如Web应用启动、Servlet初始化、会话创建或销毁等。 九、部署与配置 Servlet...
- `config`:ServletConfig对象,用于获取servlet的初始化参数。 - `page`:生成当前JSP页面的servlet实例。 - `exception`:针对错误页面,捕获未处理的异常。 6. **Servlet生命周期**: - 初始化:服务器加载...
垃圾回收(Garbage Collection,简称GC)是Java语言的一个重要特性,它自动化地管理程序中的内存分配与释放,避免了传统C++等语言中的内存泄漏问题。本文将围绕Java垃圾回收这一主题,展开一系列关键知识点的详细解析...
- 当用于变量时,表示该变量一旦被初始化就不能再被改变; - 当用于方法时,表示该方法不能被子类覆盖; - 当用于类时,表示该类不能有子类。 ### 4. Error与Exception的区别 - **Error**表示系统级错误,通常...
### Java编程思想学习笔记知识点...以上是《Java编程思想》学习笔记中关于操作符、控制语句、对象、初始化与清理等关键知识点的总结。通过理解这些基础概念和技术细节,可以更好地掌握 Java 编程的核心原理和技术实践。
#### 三、内存管理与Java及对应用服务器的影响 在Java中,内存管理是一项自动化任务,由JVM负责。这对于开发者来说是一大优势,但也意味着应用服务器部署团队需要理解并合理配置JVM参数以确保最佳性能和稳定性。 -...
一个final变量一旦初始化后,就不能再改变其值;final方法不能被重写。 - `finally`:在异常处理中起到关键作用,无论是否发生异常,finally块中的代码都会被执行,常用于释放资源。 - `finalize`:这是Object类的...
- 构造器用于初始化对象,如果没有定义构造器,系统会自动生成默认构造器。 11. **内部类**: - 内部类包括成员内部类、静态内部类、局部内部类和匿名内部类,它们可以访问外部类的私有成员。 12. **重载与重写*...
#### Java内存模型与管理 Java 应用程序在运行时会占用一定的内存空间。Java 内存管理主要包括以下几个方面: - **堆内存**:用于存储对象实例、数组等数据。堆内存可以被细分为年轻代(Young Generation)和老...
监听器是用来监听特定事件的Java类,比如会话创建、销毁、请求初始化、上下文初始化等。它们允许开发者在这些事件发生时执行相应的操作,如记录日志、清理资源等。 6. **MVC(Model-View-Controller)架构**: ...