Java的心路历程——杂谈向

Java的碎碎念

Date:3.21.2016

  • 面向对象思想
      Java是一个OOP的语言,一切皆为对象,用面向对象的思想把生活中的事物都抽象成各个对象,而类就是一堆对象的集合,对象就是类的个例,类拥有各个属性和数值,对每个符合类的对象都适用,以类的思想类考虑问题大大简化了代码的数量,更加符合逻辑。

  • 方法
      一件事可以抽象为“who do something”。Who 就是对象,而do something 就是方法了。

  • 关于类的封装
      在java中通过关键字private实现封装,把过程和数据包围起来,对数据的访问只能通过已定义的接口,通过访问器和修改器才能访问和修改数据。

  • 关于类之前的修饰符
    类的修饰

  • private
      Private就像是一堵在类的创建者和客户端程序员之间的砖墙。

  • 关于包
      包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包(default package)。

  • 关于加了包名的类的运行过程
      在调用其他类的时候要导入包下的类,import 包名.类名

  • 关于类方法
      一般调用时要首先创建一个类的对象,然后 类名.方法名调用。
    如果是static修饰类用可以用类名直接调用,不用的一定要先实例化一个对象然后才可以调用。

  • 关于对象参数
      因为Java里方法参数的传递实际上只有值传递(不管基本类型或引用类型),对基本类型来说是把其值传递了一份过去,而对引用类型来说实际是把引用地址的值复制一份传递了过去。
      另外,只有用new方法创建的对象的实际成员数据是存放在堆里面的,而其他方法内部定义的变量都存放在栈中,一旦出了方法的范围就失效,会被内存回收。

Date:3.23.2016

  • 重载Overload
public bool withdraw(double amt, string name)
  public double withdraw(double amt)

1、方法名必须相同
   2、参数列表必须不相同
   3、返回值类型可以不相同


  • 覆写Override
    public override bool withdraw(...)
    1、方法名相同
    2、参数列表相同
    3、返回值类型相同
    PS: override存在于继继承的关系类中。
    **PSS:**只有虚方法和抽象方法才能被覆写

  • 方法里参数是String[]类型 怎么直接调用
public void addCourses(String[] course){
}
addCourses({"XXX"}){
}

改正: addCourse(new String[]{“XXX”})
  **Ps:**可以用到可变长度参数,具体见下文


  • 可变长度参数
    public void addCourses(String... course) {
    }
    调用是 addCourses(“XXX”,“xxx”};
    addCourses(int num,String... course) √
    addCourses(String... course,int num) ×
    **PS:**可变长度参数在参数中后不能跟其他参数,前头却可以
    PSS编译器版本不能过低,最低javaSE-1.5

  • new 修饰符
      关键字 new 意味着内存的分配和初始化,new 调用的方法就是类的构造方法,没有用new 修饰符定义的数据都是在栈(Stack)中分配内存,但有一个例外,对于String定义的变量,总是从系统内存堆(Heap)中分配内存,栈中仅有对该String的引用

Date:4.4.2016

  • GC:垃圾回收(Garbage Collection)
    ```system.gc();``
      Java中一般不需要程序员进行内存的回收。当没有一个对象没有任何变量指向它的时候就“可以”被销毁,局部变量退出后就消失了不再指向了

  • 单例模式
    目标系统中有且只有这个类的一个对象
    步骤:
    1、声明一个静态对象
private static God instance = new God();

2、提供一个外界访问这个对象的static方法

 public static God getGod(){
		return instance	;
}

3、为了避免其他人new再创建一个新的对象,把类的构造函数改成

private	private God(){ }

  • 编号生成器
/**
 * 编号生成器
 * @author ZeroyiQ
 *
 */
public class NumberCreater {
	private static NumberCreater instance=new NumberCreater();
	public static NumberCreater getCreater(){
		return instance;
	}
	
	private NumberCreater(){
		
	}
	
	private int number=0;
	public int creater(){
		number++;
		return number;
	}
	
}


  • 重用代码
      构造函数中遇到几个参数不同的,内部却有相同的部分,可以调用另外一个重载的构造函数,复用代码。
      E.G.
public ZeroText(){
	//this.number = NumberCreater.getCreater().createNumber();
	this("");       
	//这就调用了下面带字符串参数的构造参数,省略了相同的部分
	}
public ZeroText(String test){
	this.number = NumberCreater.getCreater().createNumber();
	createText(this.number,test);
}

  • 枚举(enum)
  1. 知道给这个参数只传什么值 固定个数 有且只有几个可选值
  2. 如果传递的值错误,则不能编译通过
  3. 枚举不能new只能用“类型.名字”获取可选值

  • 枚举原理
    原本
public enum Dir {
	Left,Right,UP,Down
}

用类实现其原理

 public class MyEnum {
	private MyEnum(){
		
	}
	
	public static final MyEnum Up = new MyEnum();
	public static final MyEnum Down = new MyEnum();
	public static final MyEnum Left = new MyEnum();
	public static final MyEnum Right = new MyEnum();
	//设置final是为了防止使用者通过 MyEnum = null 的方式释放对象
}


Date:6.15.2016

  • 静态代码块
  1. 在类第一次被使用的时候执行
  2. 只执行一次在构造函数之前
  3. 同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
static {

}

  • 子类对象创建过程
    1.子类对象创建的时候会先调用父类的构造函数,在调用子类的构造函数。
    2.在子类的构造函数中,如果没有显式的调用父类的构造函数,则相当于在最开始默认调用父类的无参构造函数。super();
    (额外,super()必须是代码第一行)
    3.如果父类没有无参构造函数,那么子类必须显式调用父类的其他构造函数。

  • 不能用子类的引用指向父类的对象
Chinese c1 = new Diqiuren()×错误
//可以调用那些方法由变量的类型决定
Diqiuren c1 = new Chinese()√正确
//父类的引用可以指向子类,父类有的方法,子类肯定能调用
c1.speak  
/**PS.
*Diqiuren里有speak方法
*这句代表调用c1所指向Chinese里的speak方法
*如果speak里有override 父类方法 则调用 speak里的方法
*否则调用的是父类里的speak
**/


  • final
    1.final修饰类,则该类不允许被继承
    2.final修饰方法,则该方法不允许被覆盖
    3.final修饰属性,则该属性不会被隐式初始化(该属性必须有值,或者必须在构造方法中赋值(二者只能选一个))
    4.final修饰变量,则该变量的值只能赋值一次,即为变量

  • Object类
    在java中所有类默认继承了Object类
    Object类中的方法适用于所有的类
    如:
  • toString()
    返回对象的哈希code码(对象地址-字符串)
    通过覆盖toString方法,我们就能修改成我们需要的
  • equals()
    比较对象引用是否指向同一块内存地址
    当要比较对象属性是否相同的话,覆盖重写方法

ps.以上两种覆盖在eclipse中都有快捷生成方法


  • 异常错误
父类:Throwable
子类:Error(程序终结者,一出现程序就崩溃了)
	1.virtualMachineError 虚拟机错误
	2.ThreadDeath 线程死锁
子类:Exception
	1.runtimeException 非检查异常
		a.NullPointException 空指针异常
		b.ArrayIndexOutOfBoundsException 数组下标越界异常
		c.ClassCastException 类型转换异常
		d.ArithmeticException 算术异常
		...
	2.checkException 检查异常
		a.IOException 文件异常
		b.SQLException SQL异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值