Java碎片知识(笔记)
1.在java中有goto,但这只是保留字,并不能使用(const也是)。在eclipse中的报错信息为”Syntax error on token "goto", throw expected“。
goto的类似功能由break/continue 标签实现。
(1)break 标签
outer: for(int i=0; i<10; i++) { if(i == 5) break outer; System.out.print(i + " "); }
结果:0 1 2 3 4
分析:break通过标签跳到for循环体外,然后就不会再进入该循环了。
(2)continue 标签
outer: for(int i=0; i<3; i++) { for(int j=11; j<15; j++) { if(j == 13) continue outer; System.out.print(i + " " + j + " "); } }
结果:0 11 0 12 1 11 1 12 2 11 2 12
分析:continue通过标签跳到for外,但只是跳出当前的这次循环,它会重新进入for循环。
2.是否可以在static环境中访问非static变量?
eclipse的提示信息:Cannot make a static reference to the non-static field
3.标识符与unicode
标识符能由字母(unicode),数字,货币符号(¥,$),连接符号(_)组成。
这里关注unicode,并不是所有unicode都可以作为标识符的一部分。同时,并不是只有数字不能作为标识符首字符。
int start = 0; int part = 0; for(int i=0x0000; i<=0x10ffff; i++) { if(Character.isJavaIdentifierStart(i)) { start++; // System.out.println(Character.toChars(i)); } if(Character.isJavaIdentifierPart(i)) part++; } System.out.println("Unicode字符集个数:" + (0x10ffff+1)); System.out.println("作为首字符个数:" + start); System.out.println("作为标识符一部分个数:" + part); System.out.println("两者差距:" + (part-start));
结果:
4.i++与++i
这两者不只是先加和后加怎么简单,对于i++,其实i是先将自身的值复制给一个临时变量,然后对自身加1(如同++i),最后才参与运算。
int i = 1; i = i++; System.out.println(i);
结果: 1
i++的实现如下所示:
int temp = i; i = i+1; return temp;
5.i+++j结果是什么?
int i = 1, j = 3, result; result = i+++j; System.out.println("result: " + result); System.out.println("i = " + i); System.out.println("j = " + j);
结果:
分析:相当于(i++)+j。编译器会采取贪心规则,尽量找最多的运算符(如果学过编译原理能明白为什么这么做)。
6.float与0
float f1 = 1f; float f2 = 0f; float f3 = -0f; float result = 0f; result = f1/f2; System.out.println(result); result = f1/f3; System.out.println(result); result = f2/f2; System.out.println(result);
结果:
分析:如果是int类型,会抛出异常。
7.运算顺序
操作数的计算顺序是从左到右的,即使运算符是从右到左。
int a[] = { 0, 0, 0, 0, 0, 0}; int i = 0; a[++i] = i++; System.out.println(i); System.out.println(Arrays.toString(a));
结果:
int[] a = { 1, 2, 3 }; int i = 1; a[i] *= i = 2; System.out.println(Arrays.toString(a));
结果:
分析:a[i] *= i = 2 ==> a[i] = a[i] * (i = 2)
8.switch
switch表达式支持的表达式类型:byte, short, char, int, Byte, Short, Character, Integer, 枚举, String
9.String的最大长度
String内部是用char[]的,故最大长度就是char[]的最大长度。而char的长度类型最大为int(不能用long),故最大为2147483647。但实际通常不能到这么大,占用的内存太大了(2*2147483647接近4G)。实际能申请的最大值由堆空间的大小来决定。
10.方法重载,重写,隐藏
(1)重载:只有参数的类型和数目不同。
(2)重写:子类某个方法重写父类的某个方法。
(3)隐藏:重写 + static
11.方法重写的条件
假设sub是子类的方法,super是父类的方法。
(1)sub和super都是实例方法
如果都是static则是方法隐藏:
public class test2 { public static void main(String[] args) { foo c = new coo(); c.m1(); c.m2(); } } class foo { public void m1() { System.out.println("foo: m1");} public static void m2() { System.out.println("foo");} } class coo extends foo{ public void m1() { System.out.println("coo: m1");} public static void m2(){ System.out.println("coo");} }
结果: coo: m1 foo
分析:重写的方法能通过RTTI,用的是coo的方法。而加了static后变为方法隐藏,不能通过RTTI,用的是foo的方法。
(2)sub的签名是super的子签名
比如void print(List l)是void print(List<Number> l)的子签名。
(3)sub的返回类型是super返回类型的可替换类型
(4)sub的访问权限不能低于super
(5)sub不能抛出比super更多的异常
12.构造器
构造器既不是方法也不是成员。
显式构造器调用语句(this/super)只能在构造器的第一句。
构造器不能被子类继承,只能显式用super调用。
是new创建了对象而不是构造器。
构造器和类的方法中都有一个隐藏的参数this
13.引用类型:
(1)强引用:没有引用指向该对象时,该对象会被回收。
(2)弱引用:如果一个对象只有弱引用,每次垃圾回收时都会被回收。
(3)软引用:如果只有软引用,当JVM内存内存不足就会回收。
(4)幻影引用:如果只有幻影引用,任何时候都可能被回收
Java碎片知识(笔记)的更多相关文章
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- Java基础知识笔记(八:集合类)
目录 1 集合类简介 2 List介绍及简单使用 2.1 LinkedList介绍及简单使用 2.2 ArrayList介绍及简单使用 2.3 Vector介绍及简单使用 2.3.1 S ...
- Java基础知识笔记(五:多线程的同步问题)
编写多线程程序往往是为了提高资源的利用率,或者提高程序的运行效率,或者更好地监控程序的运行过程等.多线程同步处理的目的是为了让多个线程协调地并发工作.对多线程进行同步处理可以通过同步方法和同步语句块实 ...
- Java基础知识笔记(六:网络程序设计)
一.统一资源定位地址(URL) (1)网络地址 在网络上,计算机是通过网络地址标识.网络地址通常有两种表示方法,第一种表示方法通常采用4个整数组成,例如: 166.111.4.100表示某一网站服务器 ...
- Java基础知识笔记(七:接口、变量作用域和参数传递)
一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...
- Java基础知识笔记(四:多线程基础及生命周期)
一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...
- Java基础知识笔记(三:文件与数据流)
一.输入流与输出流 输入流将数据从文件.标准输入或其他外部输入设备中加载到内存.输出流的作用则刚好相反,即将在内存中的数据保存到文件中,或传输给输出设备.输入流在Java语言中对应于抽象类java.i ...
- Java基础知识笔记(二:泛型和枚举)
1.泛型 与面向对象的多态性相类似,应用泛型可以提高程序的复用性.与多态性不同的是,应用泛型可以减少数据的类型转换,从而提高代码的运行效率.泛型实际上是通过给类或接口增加类型参数实现的.不带泛型的类的 ...
- Java基础知识笔记(一:修饰词、向量、哈希表)
一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...
随机推荐
- blade快速使用指南
一.简介模板引擎 模板引擎是将网站的页面设计和PHP应用程序几乎完全分离的一种解决方案,它能让前端工程师专注页面搭建,让后台工程师专注功能实现,以便实现逻辑分离,让每个人发挥所长.模板引擎技术的核心是 ...
- AngularJs优缺点
1.优点:mvc.模块化.指令系统.双向数据绑定. 2.缺点:异步支持不好,放弃IE8.
- POJ1201 Intervals差分约束系统(最短路)
Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...
- Java String类的常用方法
String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. String(Sting original) ...
- Zookeeper 分布式环境搭建
一.前期环境 安装概览 IP Host Name Software 192.168.23.128 ae01 JDK 1.7 192.168.23.129 ae02 JDK 1. ...
- 跳转页面&回到上一页
1.php <?php header('Location:2.php'); //echo不能在其前面 echo '1'; 2.js <?php echo '2'; echo '<me ...
- 你可能不再需要Underscore
过去几年像 Underscore 和 lodash 等库进入许多JavaScript程序员的工具函数中.虽然这些工具库可以使你的代码写起来更容易,但是他们不一定使代码更简单或更容易理解. 各种工具函数 ...
- SAD算法在opencv上的实现代码(c++)
#include <opencv2/opencv.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgu ...
- 51Nod 1001 数组中和等于K的数对 Label:Water
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...
- iOS 三种收起键盘的方法
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...