1、方法重载和方法重写的区别
比较点 | 重载 | 重写 | |
1 | 单词 | Overload | Override |
2 | 方法的声明 | 方法名相同,参数列表不同 | 方法名相同,参数列表相同 |
3 | 返回值 | 没有要求 | 返回值必须相同或者子类 |
4 | 访问权限 | 没有要求 | 比父类大 |
5 | 异常范围 | 没有要求 | 比父类小或者与父类相同 |
6 | 范围 | 同一个类中 | 继承关系中 |
2、在别人博客看到一篇文章,说写一个方法:指定一个整数n,返回一组随机数,包含0--( n-1),不能重复。
评论里有人收用Set可以直接返回,因为HashSet存的元素是无序的,觉得想法有新意。
但是还是验证了下:
public static void getRandomList(int len) { Set set = new HashSet(); for (int i = 0; i < len; i++) { set.add(i); } Iterator iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }
发现传入10,100,1000...都是顺序返回,后来传入1000,000 发现总体是递增的,局部有乱序。
HashSet是不保证有序,但不是保证无序,这是有区别的。
评论下其他的方法:
public static void getRandomList(int len) { List list = new ArrayList(len); List list2 = new ArrayList(len); for (int i = 0; i < len; i++) { list.add(i); } Random r = new Random(); while (list.size() > 0) { list2.add(list.remove(r.nextInt(list.size()))); } System.out.println(list2); }
2、代码执行顺序
public class Pa { public static void static_method() { System.out.println("Pa:static_method"); } static { System.out.println("Pa:static_area"); } { System.out.println("Pa:normal_area"); } public Pa() { System.out.println("Pa:constructor"); } }
public class A extends Pa { public static void static_method() { System.out.println("A:static_method"); } static { System.out.println("A:static_area"); } { System.out.println("A:normal_area"); } public A() { System.out.println("A:constructor"); } }
public static void main(String[] args) { A a = new A(); }
结果:
Pa:static_area A:static_area Pa:normal_area Pa:constructor A:normal_area A:constructor