已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.switchpublic class TestSwitch public static void main(String args) int i = 2; switch (i) case 1: System.out.println(1); case 2: System.out.println(2); case 3: System.out.println(3); default: System.out.println(4); 结果: 2 3 4 分析: 少了break;所以2以下的case和default都执行了一遍。 二、Equals和=运算符 代码: Java代码 public static void test() String x = hello; String y = world; String z = new String(helloworld); String a = helloworld; System.out.println(x+y equals z: + (x + y).equals(z); System.out.println(a = z: + (a = z); System.out.println(x = hello: + (x = hello); System.out.println(a = helloworld: + (a = hello + world); System.out.println(a = x+y: + (a = (x + y); 结果: x+y equals z:true a = z:false x = hello:true a = helloworld:true a = x+y:false 分析: 1.String.equals()方法比较的是字符串的内容,所以(x + y).equals(z)为true. 2.“=”比较的是 String 实例的引用,很明显 a 和z 并不是同一个 String 实例,所以(a = z)为false. 3.根据常量池的知识,容易得知(x = hello)和(a = hello + world)都为true. (常量池指的是在编译期被确定并被保存在已编译的.class 文件中的一些数据。它包含了 关于方法、类、接口等,当然还有字符串常量的信息。也就是所谓的持久代。) 4.那么(a = (x + y)为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。 三、Override覆盖 代码: Java代码 public class Parent public static String say() return parent static say; public String say2() return parent say; public class Child extends Parent public static String say() return child static say; public String say2() return child say; public class OverrideTest public static void main(String args) Parent p = new Child(); System.out.println(p.say(); System.out.println(p.say2(); 结果: parent static say child say 分析: 1.我们创建了一个Parent类的实例。变量 p 的数据类型为 Parent 类 但是它仍旧是 Child 类的一个实例。因为Child类覆盖了Parent类的方法say2(),所以p.say2()调用为子类的方法。 2.为什么p.say()却是调用父类Parent的方法呢?因为Java中规定“实例方法被覆盖,静态方法被隐藏”. 关于Override的一些规则: 用子类的静态方法隐藏父类中同样标识的实例方法是不合法的,编译器将会报错; 用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的,编译器同样会报错; 带关键字 final的方法(静态和实例方法)都不能被覆盖; 实例方法能够被覆盖; 抽象方法必须在具体类中被覆盖。 四、Java强类型 代码: Java代码 public class Type public static void main(String args) double i = 5.0; double j = 1 / 4 + 3 / 4 + i + 12 / 6.0 + 3 / 4 + 1 / 4; System.out.println(j); 结果: 7.0 分析: Java 是强类型的 strongly type,它支持8 种基本数据类型。通过对这些基本数据类型用法的严格检查 Java 编译器能够及时地在开发过程中捕捉到许多简单细微的错误。基本数据类型的转换可以隐性地发生,所以转换时会有精度损失。由于1/4和3/4发生隐性类型转换,精度损失,不会生成0.25和0.75,所以有分号的数都为0。 五、假构造函数 代码: Java代码 public class Constructor private int a, b, c; public void Constructor() a = 3; b = 5; c = a + b; public void test() System.out.println(The value of c : + c); public static void main(String args) Constructor c = new Constructor(); c.test(); 结果: The value of c :0 分析: public void Constructor()并不是一个真正的构造函数,而是一个方法。所以c的值为默认值0. 六、提前引用 代码: Java代码 public class ForwardReference static int first = test(); static int second = 2; static int test() return second; public static void main(String args) System.out.println(first = + first); 结果: first = 0 分析: 由于在初始化second之前test方法就访问了它,那么方法得到的是second的默认值,即 0。 因此输出结果first= 0,而不是2。假如你使用方法调用来初始化静态变量,那么你必须保证 这些方法并不依赖于在它们之后声明的其它静态变量。静态变量以及静态初始化块是在类被加载进 JVM 时执行初始化操作的。Java 语言规范8.5节指出“静态初始化块和静态变量是按照其在代码中出现的顺序依次执行初始化操作的,而不能在类变量声明出现之前就引用它”。 七、对象引用 代码: Java代码 public class TestRef public static void main(String args) StringBuffer a = new StringBuffer(a);StringBuffer b = new StringBuffer(b);append(a, b);System.out.println(a.toString() + , + b.toString();b = a;System.out.println(a.toString() + , + b.toString();public static void append(StringBuffer a, StringBuffer b) a.append(b);b = a;结果: ab,b ab,ab 分析: 大家来分析一下这题,我还没有完全理解。 我的分析,可能是错的,哈哈,算是抛砖引玉。 1.a.append(b);-ab 。因为a是引用,所以调用a的方法,相当于直接调用jvm中的a,所做的append也相当于直接在对象上操作,生效。 2.append方法中第一次b=a,-b。因为a,b都为main方法内局部变量,跨append方法作用域b对a的引用不生效。 3.main方法中第二次b=a,-ab。因为在同一作用域方法中,b对a的引用生效,。 List 接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。 Set接口也是 Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和 Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。 Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业形象顾问岗位招聘面试参考试题及参考答案
- 2025年宠物医生岗位招聘面试参考试题及参考答案
- 2025年彩妆师岗位招聘面试参考题库及参考答案
- 红外遥感应用-洞察与解读
- 2025年粤教初中地理试卷及答案
- 河北专升本简单试题及答案
- 2025年志愿者协调员岗位招聘面试参考试题及参考答案
- 2025年剧场管理者岗位招聘面试参考试题及参考答案
- 2025年街道社区经理岗位招聘面试参考试题及参考答案
- 2025年非遗项目推广专员岗位招聘面试参考题库及参考答案
- 美术馆员工合同协议书
- 2025年广西普法考试(一)及答案
- 2025年中国华电集团有限公司总部部门招聘12人考试参考试题及答案解析
- 2024年Q1起重机指挥模拟练习题及答案
- 小学冬季安全教育课件
- 交通道路安全法 课件
- 2026年辽宁医药职业学院单招职业倾向性测试题库附答案
- 焦裕禄事迹课件
- 北大教育博士真题及答案
- 水利水电工程移民安置验收规程(2025版)
- 第四章篮球篮球基本战术长传快攻教学设计人教版初中体育与健康八年级全一册
评论
0/150
提交评论