• 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);
    }
    
  • 相关阅读:
    OpenCV__Canny边缘检测和缩放(译)
    OpenCV_avi读入视频
    Canny边缘检测源码与图像结果(OpenCV2.0)
    OpenCV_累加一个三通道矩阵中的所有元素
    tomcat下出现 java.lang.OutOfMemoryError: Java heap space
    清空和截断数据库日志并收缩数据库
    java.lang.OutOfMemoryError: Java heap space 的解决
    java.lang.OutOfMemoryError: Java heap space 解决方法
    通达OA 2008 工作流数据库表的大致结构
    java获取本月的第一天和最后一天
  • 原文地址:https://www.cnblogs.com/zy200128/p/12633705.html
Copyright © 2020-2023  润新知