自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 《effectiva java》item 33, 34

item 33: 考虑类型安全的异构容器一个容器,如 Map<String, Object> 可以通常此方法进行类型检查,保证类型安全,但有些时候,我们可能需要特定类型的数据。那应该如何让编译器为我们进行类型检查呢?方法很简单,就是参数化key.将上面的map改为 Map<Class<?>, Object>public class TestHeterogeneousContainer_33 { public static void main(String

2022-04-25 15:45:31 310

原创 《effective java》item 31, 32

item 31: 使用通配限定符提高api灵活性更符合逻辑。假设有一个Stack<Number>, 其中的push定义如下 public void push(E e) { ensureCapcity(); //确保容量足够,不够扩容。 elements[capacity++] = e;}那么,stack.push(new Integer(1))是可以的。因为Integer是Number的子类现在定义一个pushAll方法public void pushAll(C

2022-03-31 17:33:41 607

原创 《effective java》item 28, 29,30

item 28 倾向于使用list而不是Array泛型和数组的区别(比如:List<Integer> 和 Integer [])数组是covariant的, 泛型不是。所谓covariant的意思是,子类数组的类型是父类数组类型的子类(Ingteger[]是Object[]的子类,但List<Integer>不是List<Object>的子类)数组是具体化的,这意味着数组运行时完全知道类型信息,运行时给元素赋值其他类型数据,发生类型错误。而泛型的类型信息仅存在

2022-03-11 10:08:19 288

原创 《effective java》item 24, 25, 26

item25: 不要在一个源文件类定义多个类坏处:编译时文件的顺序不同,结果可能不同应当:如果有从属关系,可用使用静态内部类,否则将多个类分到多个文件中,接口同理。item26:使用泛型,不要使用原始数据类型泛型例子: List<String>   原始数据类型例子: List泛型使得类型转换错误 提前到了编译期。保留原始数据类型是为了兼容之前没泛型时的代码,也因此,编译器对泛型进行了泛型擦除定义方法时,参数List表明改List的元素类型是E,后续可能会用到E定义变量或其他

2022-03-11 10:05:21 201

原创 《effective java》item 22,23

item 22:Use interfaces only to define types接口用来说明实现类的功能,不要用来保存静态变量。(反面例子:所谓constant interface: java.io.ObjectStreamConstants)若是要导出某些常用的静态变量,可直接在定义在类的内部(如Interger.MAX_VAL),或将一系列静态变量封装成一个静态工具类,再私有化其构造方法如果使用静态类的静态常量时名字太长(类名加常量名),可以使用static import。(如 impor

2022-03-11 10:04:32 181

原创 6.s081 第四周实验 Lab pgtbl: Page tables

1. Print a page table在vm.c中, 实现一个vmprint()函数来遍历页表并打印,可以仿照freewalk()函数来写。记得在def.h 添加声明void printwalk(pagetable_t pagetable, int level) { char* prefix; if (level == 2) prefix = ".."; else if (level == 1) prefix = ".. .."; else prefix = ".. .. .

2022-02-28 00:35:05 542

原创 《effective java》item 18, 19

item18: 组合优于继承继承在同一个包内,由同一个程序员编写时,是安全的。但在跨包继承时,容易出现问题。子类由于功能不同,重新了父类的某个方法。但由于其实现调用了父类的其他方法,在不清楚父类实现时(父类方法可能又调了父类另一方法),容易出现问题。 或许当前没问题,父类后续更新了,就会发生问题。可能的安全的问题。设计一个集合,当元素满足某个条件时,才保存到集合中。这可以通过《继承某个集合类,重写它所有的可以添加元素的方法,加上判断语句后,再调用父类的原方法插入元素》实现。但这会随着集合类更新,增

2022-02-23 09:45:46 158

原创 《effective java》item 16, 17

item 16: 再public的class中,不要暴露公共的属性对于public的class中的可变属性,提供get/set方法。不可变属性可以考虑直接暴露。对于default的class或者内部类,若能带来方便,属性可以直接暴露。item 17: 减少类的可变性类的属性首选private final...

2022-02-23 09:38:18 145

原创 《effective java》item 14,15

item 14: 考虑实现Comparable接口Collections的sort方法会自动调用对象的compareTo方法排序,compareTo方法来自Comparable注意一点,尽量保证 x.equals(y) 与 x.compareTo(y)一致,否则可能会出现一些小问题。因为某些集合判断调用的是equals(HashSet),带有序性的集合(TreeSet)调用的是compareTo,两者不一致。例子,new BigDecimal("1.0")和 new BigDecimal("1.00

2022-02-23 09:37:15 226

原创 《effective java》item11,12

item11: 重写equals后要重写hashCode因为按照规定,equal的两个对象,它们的hashCode要一致,不equal的无要求。Object的equals是满足这个规定的而重写的equals后,按照该类的equals方法相等的两个对象,如果按照Object的equals来说,应当是不相等的(相等就不用重写equals)。而Object的equals是满足规矩的,也就是说它们默认的hashcode不一定相等。也就是重写的equals不一定能满足规矩(因为按照规定,相等的对象,hashco

2022-02-22 17:00:31 135

原创 《effective java》item 6, 8

item6:尽量避免创建不需要的对象错误示范1//"test"本身就是一个对象,调用String的构造函数再生成一个// Stringd的对象s,没有什么意义String s = new String("test");错误示范2public static long sum() { Long sum = 0; for (long i=0; i<=Integer.MAX_VALUE;i++) { sum += i; }} //这里的sum是Lo

2022-02-22 17:00:12 153

原创 《effective java》 item 1,2

item 1. 尽量使用静态方法提供类实例对象,而不是直接使用构造方法。优点:方法有名字,可以知道具体是怎样的实例不需要每次创建新对象方法可以返回 返回值类型的 子类对象方法返回对象的类不需要存在(返回接口类型)缺点:只提供静态方法,而构造函数又不是public或protected的类无法被继承。静态方法不容易被找到。...

2022-02-22 16:59:21 152

原创 6.s081 第二周实验

第二周实验1 :tracetrace函数: 参数为一个整数mask。他的bit为1的位置决定了需要trace的syscall函数,比如trace 32, 32 = 100000, 1所在的位置是第5位(从0开始,右往左),查看syscall.h文件,编号为5的函数是sys_read(). 因此trace 32 xxx。 会打印xxx命令中涉及read函数的信息过程:Add $U/_trace to UPROGS in Makefile在user/user.h中添加 trace的声明int

2022-01-16 23:34:29 645

原创 6.s081 实验1 记录

实验一test_pipe.cprimes.c# 实验一没什么前置知识,配置好环境,会c语言直接就可以做。 Lab util: Unix utilitiestest_pipe.c#include "kernel/stat.h"#include "user/user.h"int main(int avgc, char* argv[]) { char buf[1]; char abyte[] = "abc"; int p[2]; pipe(p); in

2022-01-10 11:42:42 250

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除