Java学习笔记-类的创建

构造方法

  1. 当一个类中没有提供任何构造方法,系统默认提供一个无参数的构造方法,这个无参数的构造方法叫做缺省构造器
  2. 当一个类中手动的提供了构造方法,那么系统将不在默认提供无参数的构造方法;建议将无参构造方法手动写出来,防止出错。
  3. 构造方法的名字是类名,且没有返回值
  4. 实例变量在构造方法执行的过程中才会完成初始化,而不是在类加载的时候
    • 如果没有手动赋值,那么会自动赋系统值/默认值
  5. 语法- this(实际参数列表):
    • 通过当前的构造方法去调用本类中另一个构造方法,
    • 作用:实现代码复用
    • 死记硬背:对于this()的调用只能出现在构造方法的第一行

实例语句块

1.在什么时候执行?

  • 只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句块”中的代码
  • 这也是SUN公司为程序员准备一个特殊的时机,叫做对象构造时机

2.有什么用处?

  • 多个构造方法有重复的赋值部分,可以这些共同的赋值部分放到实例语句块中。
public class InstanceCode{
	
	//入口
	public static void main(String[] args){
		System.out.println("main begin");
		new InstanceCode;
		new InstanceCode("aaa");
	} 
	//实例语句块
	{
		System.out.println("实例语句块执行!");
	}
	
	//Constructor
	public InstanceCode(){
		System.out.println("无参数构造方法");
	}
	//Constructor
	public InstanceCode(String name){
		System.out.println("有参数构造方法");
	}
}

封装

封装的代码实现步骤:

  • 属性私有化
  • 1个属性对外提供两个set和get方法。外部程序只能通过set方法修改,只能通过get方法读取,可以在set方法中设立关卡来保证数据的安全性
  • set和get方法写的时候严格按照规范要求来写

静态变量和静态方法

  • 所有static关键字修饰的都是类相关的,类级别的
  • 所有static修饰的,都是采用"类名."的方式访问,最好不要用"引用."的方式,会让人区分不出来是否是静态的。
  • 静态变量在类加载时就完成初始化,不需要new对象,并且存储在类对应的方法区
  1. 什么时候变量声明为实例的,声明为静态的?
  • 某一属性是类级别的特征,而不是对象级别的特征
  1. 什么时候定义实例方法和什么时候定义静态方法?
  • 此方法一般都是描述了一个行为,如果说该行为必须由对象去触发。那么该方法定义为实例方法
  • 静态方法不能调用实例方法,或者读写实例属性,因为未必有对象实例化
  • 但是,实例方法调用静态方法,修改静态变量就没有问题。

3.参考标准:

  • 当这个方法体中,直接访问了实例变量,那么这个方法一定是实例方法
  • 在开发中,大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的

静态代码块

  1. 使用static关键字可以定义: 静态代码块

  2. static静态代码块在什么时候执行?

    • 类加载时执行,并且只执行一次
  3. 静态代码块在类加载时执行,并且在main方法执行之前按照自上而下的顺序执行

  4. 静态代码块的作用?

    • 静态代码块这个语法机制实际上时SUN公司给程序员的一个特殊的时机,这个时机叫做: 类加载时机
    • 具体来说,就是在类加载时,记录类加载到JVM中的日志信息(例如时间信息);这个记录日志的代码就写在静态代码块中
public class StaticTest{
	//静态代码块
	static {
		System.out.println("A");
	}
	//一个类中可以编写多个静态代码块
	static {
		System.out.println("B");
	}
	//入口
	public static void main(String[] args){
		System.out.println("Hello World");
	}
	//在定义一个
	static int i = 100;
	static {
		System.out.println("i : " + i);
	}	
}

4.如果静态变量在静态代码块之后定义?

static {
    System.out.println("i : " + i);
}
static int i = 100;
  • 静态代码块和静态变量都在类加载的时候执行,时间相同只能靠代码的顺序决定。
  • 编译错误:非法前向引用

空指针异常

  • 以下程序编译可以通过,因为符合语法
  • 运行时出现空指针异常
  • 空引用访问"实例"相关的数据一定会出现著名的异常---空指针异常: java.lang.NullPointerException
    • "实例"相关的数据表示:这个数据访问的时候必须有对象的参与,这种数据就是实例相关的数据
public static void main(Sting[] args){
	Students s = new Students();
	System.out.println(s.age);
	
	s = NULL;
	System.out.println(s.age);
}

猜你喜欢

转载自www.cnblogs.com/zy200128/p/12633705.html