java面向对象总结笔记_疯狂java讲义的笔记总结1: 语法和面向对象基础

疯狂java讲义的笔记总结1:

语法和面向对象基础

引用类型的参数传递 class DataWrap { public int a; public int b; } public class ReferenceTransferTest { public static void swap(DataWrap dw) { //这个实现了交换功能 int tmp=dw.a; dw.a=dw.b; dw.b=tmp; System.out.println("swap方法里,a Field的值是"+dw.a+";b Field 的值是"+dw.b); } public static void main(String[] args) { DataWrap dw=new DataWrap; dw.a=6; dw.b=9; swap(dw); System.out.println("交换结束后,a Field 的值是"+dw.a+";b Field 的值是"+dw.b); } } int 是一种值类型,其传递是无法改变实参的,但是如果你把它打包成引用型的,就可以实现参数传递。但是如果用包装类,包装类貌似是final的 最后一个形参的类型后增加...,表示可以有参数数量可变 例如:int test(int a,String... books){} 局部变量可与成员变量同名,在方法中此名的代指局部变量,用this.此名代指成员变量 变量要遵循在哪用在哪定义的原则,方便在一个方法结束后对资源进行回收。 访问控制级别 private 同一个类中。自由使用 default 同一个包中。 protected 子类中 public 全局范围 类中的Field应该通过setter和getter函数来控制(Field应该设为private,只有一些static的类似全局的,才考虑Field) 包提供了类的多层命令空间 如果我们想把一个类放在某个包底下,那么源码的第一行 package packageName; ... class hello... 在命令行下用 javac -d . hello.java//-d这个参数是设定class文件的保存位置 java规定包中类最好在包名的目录下 如果项目够大,还可以在包下以项目名建立子包,在项目名子包下还可以以模块名建立模块子包。跨包使用类的话要加前缀(包名加类名),会很麻烦,故引入import这个关键字。一个源文件最多只能有一个package packageName;使用import package.subpackage...ClassName; 或import package.subpackage...*;(注意*只能代表类,不能代表包)。util包和sql包下面都有Date类如果这种情况,还是要使用类的全名。 一个重载的构造器,其内部可以用this来调用另一个构造器。 ... class ...{ gouzhaoqi(){} gouzhaoqi(int a){...this();...} } 方法的重写遵循两同两小一大(方法名相同、形参列表相同,两小是指子类返回值类型或抛出的异常类更小或相等) super限定,可以调用父类被覆盖的方法,(也可以把子类对象转换成父类型再调用) 创建任何对象从该类所在的继承树最顶层的构造器开始执行 多态性:创建引用变量时,BaseClass p=new SubClass();//Java允许把一个子类对象直接赋值给一个父类引用变量,无需任何类型转换 当运行这个对象p时,其方法同子类,Field同父类, if(objPri instanceof String){String str=(String)objPri;}强制类型转换之前的一个检测 组合 继承可能会破坏封装 继承:(is-a) class A{...方法...} class B extends A{} class C extends B{} 组合:(has-a) class A{...A方法...} class B{ A a; B(A a){...this.a=a;...}//在构造函数里进行传入 B方法(){a.A方法();}    //B方法调用了A方法 } class C{ B b; C(B b){...this.b=b;...} C方法(){b.B方法();} } 初始化块在构造器执行之前执行(new之前),一个类中静态初始化块最先执行,其次是普通初始化块,最后是构造函数(new时) 基本类型转换为包装类 boolean bl=true; Boolean Bl=new Boolean(bl);//包装成包装类 包装类转化为基本类型 boolean bb=Bl.booleanValue(); 另一种方法, 基本类型转换为包装类 Integer in=5;//Integer in=String.valueof(i); Boolean bo=true;//Boolean bo=String.valueof(b); 包装类转化为基本类型 int i=Integer.parseInt(in); bool b=Boolean.parseBool(bo); 自动装箱时有缓存机制 所有包装类都有compare方法,包装类都是不可变类 Object类的toString方法返回的是“类名+@+hashCode”值 ==是指向同一个对象 equals是值相等即可 判断一个对象p是否是某个类的实例时,使用if(p.getClass()==类名.class)...来判断 有些类只能创建一个实例,单例类,构造器用private修饰,再提供一个public static方法调用构造器,还必须缓存已经创建的对象 class Singleton { private static Singleton instance; private Singleton(){} public static Singleton getInstance(){  if(instance==null){instance=new Singleton();} return instance; }  } public class Test { public static void main(String[] args) { Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance();//使用这种方法进行实例化 System.out.println(s1==s2);//输出true } } 用static final修饰的成员变量必须在初始化块或声明这个Field时指定初始值 用final修饰的成员变量必须在初始化块或声明这个Field或构造器时指定初始值 用final修饰基本类型变量时,无法再次将其赋值。但是用final修饰引用型变量时,会一直引用这个对象,但是对象可以发生改变 final修饰的变量若是满足定义时指定初值,初值可以在编译时确定下来,final变量其实就起到了类似宏的作用,变量本身其实不存在,存在的是常量 final类不可有子类 不可变类 使用final和private来修饰Field 提供带参数的构造器来传入参数来初始化Field 仅为Field提供getter方法,没有setter方法 可能要重写Object类的hashCode和equals方法 public class Address { private final String name; private static int MAX=10; private static Address[] cache=new Address[MAX];//存放缓存 private static int pos=0; public Address(String name) { this.name=name; } public String getName(){return this.name;} public static Address valueof(String name)//这个valueof函数和包装类中的valueOf类似 { for(int i=0;i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值