[Java]2.面向对象

    xiaoxiao2026-06-10  11

    一、关于面向对象 面向对象对于编程而言是非常重要的思想,面向对象的思想在java中体现在抽象、封装上,多态则是其运用时的体现,面向对象最直接的好处在于增强了代码的复用,这是极为重要的。 编程当中,方法都应尽量依附对象和类。 static void sayHello() ;   // 该方法属于这个类 void  sayHello();             //该方法属于这个类的实例  (变量同理) java里面的参数传递机制:值传递 将实际参数的副本(复制品)传入方法内,参数本身不受影响。 形参可变的方法,下面的books为可变数组。 例如:public void test(int a, String... books) 相当于:public void test (int a, String[] books) 同个类中包含多个方法名相同,形参不同,称为重载(overload) 至于方法的其他部分如修饰符、返回值,跟重载没有任何关系 重载方法,调用此方法时会根据传入的形参决定调用的方法。 构造器是一个特殊的方法,用于创建实例时执行初始化 必须包含一个或者多个构造器 系统会默认提供一个无参的构造器 二、隐藏与封装 隐藏类的实现细节 让使用者只能通过预定的方法来访问状态信息,从而在该方法里面加入控制逻辑,限制对成员变量的不合理的访问 可进行数据检查,从而有利于保证对象信息的完整性 private:当前类访问 default:包访问 protected:子类访问 三、继承 JAVA类具有单继承特点,每个子类只有一个直接父类 继承父类使用extends关键字 定义一个类未显式声明,默认扩展java.lang.Object类 Object类是所有类的父类 implements关键字可以多实现接口 尽量不要在父类构造器中调用被子类重写的方法(空指针) super: 用于调用父类被覆盖的实例方法,不能是静态方法(static) 用于调用父类的构造函数,例如 super(value1,value2) 用于调用父类的实例变量,例如 super.value 四、多态 Java引用变量有两类:编译时类型和运行时类型 编译时类型:由声明该变量时候用的类型决定 运行时类型:由实际赋值给该变量的对象决定 //编译类型为Object,实际类型是Integer Object obj=new Integer(100); if(obj instanceof String){ String str=(String)obj; } 五、初始化块 {}包裹的代码 只能用static修饰或不修饰,静态的先执行然后从上到下 六、包装类 包装类的设计目的,是为了方便基础数据类型进行计算和转换的繁琐操作 基本数据类型不能当成Object类型变量来使用,只能使用包装类 byte——Byte short——Short int——Integer long——Long char——Character float——Float double——Double boolean——Boolean 装箱:基本数据类型变量-->包装类对象 拆箱:包装类对象-->基本数据类型变量 Integer inObj=100;  //自动装箱 Object boolObj=true; //自动装箱 int it=inObj; //自动拆箱 字符串-->基本数据类型: 方法一:利用包装类里面的parseXxx(String s)的静态方法(Character无此方法) 方法二:利用包装类的Xxx(String s)构造器 基本数据类型-->字符串: 利用String.valueOf(val) 转换 七、Object类型基本方法: 对象描述:toString() 对象对比:equals() == 和 equals方法: ==:基础数据类型中使用 equals(): 引用数据类型中使用 八、final修饰符: final成员变量一旦有了初始值,就不能被重新赋值 如果不赋值,系统将会默认给它分配0、null或者false等值,毫无意义,也无法再次改变,所以必须显式初始化 final修饰的类不可以有子类 final变量-基本类型和引用类型区别: 基本类型:不能重复赋值 引用类型:它仅仅是保存一个引用,只保证引用地址不会改变即可,也就是说对象本身是可以改变的。 final int [] iArr={3,4,2,9,6}; 数组内容可以一直改变 九、抽象类和接口 接口特点: 使用interface关键字进行修饰 接口支持多继承 public interface 接口名 extends 父接口1, 父接口2... 所有方法都是抽象方法(abstract)并且是使用public修饰的 接口里的成员变量默认使用public static final进行修饰 实现接口方法时,必须使用public访问控制符 抽象类和接口的区别: 抽象类可以有私有的方法和变量,接口的内容都必须是公有的。 抽象类和接口的共有特点: 有方法而无实现(方法体)方法都用abstract修饰 十、内部类 静态内部类: 只能访问外部类的静态方法 成员内部类: 可以访问外部类中的静态和非静态方法和成员变量 this.a调用内部类成员 OutClass.this.a调用外部类成员 局部内部类(方法内部类): 类似于局部变量,不能定义为public,protected,private或者static类型。 局部内部类只能访问final类型的变量 不能被直接创建,只能通过调用所在方法创建 匿名内部类: 匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。 匿名内部类会隐式地继承一个父类或实现一个接口。 内部类优点,内部类可以随意使用其外部类的变量和方法(不需要创建外部类对象),包括私有成员 十一、枚举类 SeasonEnum returnstring = Enum.valueOf(SeasonEnum.class,string) valueof作用等价于toString 枚举类的方法:values可以获取每一个实例,用于遍历枚举类型 十二、GC(对象垃圾回收机制) 超出作用域或对象为null时回收 只回收对象 无法精确控制垃圾回收的运行 回收对象之前,都会先调用finalize() 对象在jvm堆区的三种状态: 可达状态 可恢复状态 不可达状态 只能控制对象何时不被引用(为NULL,不可达状态),不能控制回收时间 强制垃圾回收:System.gc和Runtime.getRuntime.gc可以提醒系统回收(后者更好) System.runFinalization()马上执行finalize
    转载请注明原文地址: https://ju.6miu.com/read-1310375.html
    最新回复(0)