zoukankan      html  css  js  c++  java
  • Java基础04

    Java面向对象

    面向对象的三个基本特征

    1. 可重用性:它是面向对象软件开发的核心思路,提高了开发效率。面向对象程序设计的抽象、继承、封装和多态四大特点都围绕这个核心。
    2. 可扩展性:它使面向对象设计脱离了基于模块的设计,便于软件的修改。
    3. 可管理性:能够将功能与数据结合,方便管理。

    继承性

    1. 这种层次形的分类方式,是为了将多个类的通用属性和方法提取出来,放在它们的父类中,然后只需要在子类中各自定义自己独有的属性和方法,并以继承的形式在父类中获取它们的通用属性和方法即可。
    2. 子类继承父类,可以获取父类的所有方法,私有的东西无法被继承
    3. 继承的本质是对某一批类的抽象, 从而实现对现实世界更好的建模。
    4. extends的意思是“扩展”。子类是父类的扩展
    5. JAVA中类只有单继承,没有多继承!
    • object类是Java中所有类的祖宗类
    • super调用父类的构造方法,必须在构造方法的第一个
    • super必须只能出现在子类的方法或者构造方法中!
    • super和this不能同时调用构造方法!

    封装性

    • 封装的意义:提高系统安全性,保护数据,隐藏代码细节,统一接口,系统可维护性得到提升
    • Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望的事情。

    多态性

    1. 一个对象实际类型是确定的,但是可以指向的引用类型就不确定了:父类的引用类型可以指向子类的对象

      public class A extends B {
      
      
         public  void test() {
              B b = new A();
              System.out.println("A=>Atest");
          }
      }
      
    2. 用一个方法可以根据发送对象的不同而采取多种不同的行为方式。(多态是方法的多态,属性没有多态)

    3. 多态存在的条件

      • 有继承关系
      • 子类重写父类的方法
      • 父类引用指向子类对象
    4. 把子类转为父类,向上转型;

    5. 把父类转为子类,向下转型,强制类型转换,可能会丢失一些方法

    类的本质用来组织代码(方法归类),封装数据的(理解提高成员变量的安全性)。

    关键字

    • public:表示“共有”的意思。如果使用 public 修饰,则可以被其他类和程序访问。每个 Java 程序的主类都必须是 public 类,作为公共工具供其他类和程序使用的类应定义为 public 类。
    • abstract:如果类被 abstract 修饰,则该类为抽象类,抽象类不能被实例化,但抽象类中可以有抽象方法(使用 abstract 修饰的方法)和具体方法(没有使用 abstract 修饰的方法)。继承该抽象类的所有子类都必须实现该抽象 类中的所有抽象方法(除非子类也是 抽象类)。
    • final:如果类被 final 修饰,则不允许被继承。
    • class:声明类的关键字。
    • class_name:类的名称。
    • extends:表示继承其他类。
    • implements:表示实现某些接口。
    • property_type:表示成员变量的类型。
    • property:表示成员变量名称。
    • function():表示成员方法名称。

    调用成员方法 4 点核心:

    1. 对无参成员方法来说,是没有实际参数列表的(即没有 paramList),但方法名后的括号不能省略
     public static void main(String[] args) {
            int[] Gao;  //数组的定义
    
            Gao = new int[20]; //创建一个数组
    
            //给数组赋值
            Gao[1] = 10;
            System.out.println(Gao.length);
    
            String a = new String("ABCD");
            System.out.println(a.length());
    
        }
    
    1. 对带参数的成员方法来说,实参的个数、顺序以及它们的数据类型必须与形式参数的个数、顺序以及它们的数据类型保持一致,各个实参间用逗号分隔。实参名与形参名可以相同,也可以不同。
    2. 实参也可以是表达式,此时一定要注意使表达式的数据类型与形参的数据类型相同,或者使表达式的类型按 Java 类型转换规则达到形参指明的数据类型。
    3. 实参变量对形参变量的数据传递是“值传递”,即只能由实参传递给形参,而不能由形参传递给实参。程序中执行到调用成员方法时,Java 把实参值复制到一个临时的存储区(栈)中,形参的任何修改都在栈中进行,当退出该成员方法时,Java 自动清除栈中的内容。

    成员变量和局部变量的区别

    1. 定义的位置不同
      成员变量: 类体以内,方法体以外
      局部变量: 方法的声明上,或者方法体内

    2. 在内存的位置不一样
      成员变量: 在堆区分配内存
      局部变量: 在栈区分配内存

    3. 初始化值不一样
      成员变量: 系统赋予初始值
      byte short int long 0
      float double 0.0
      boolean false
      char u0000
      引用类型 null
      局部变量: 方法的声明上,或者方法体内
      没有默认值,必须先声明再赋值再使用

    4. 变量的生命周期不一样
      生命周期: 变量从开始创建到销毁的全过程
      成员变量: 随着对象的创建而创建,随着垃圾回收器回收对象的时候销毁
      局部变量: 随着方法的调用而创建,随着方法调用结束而销毁

    5. 当成员变量和局部变量重名的时候,**局部变量优先,就近原则
      如果希望访问成员变量,需要使用this关键字 **

    Static关键字

    • 类中的静态变量和方法,是在Java方法区的静态方法区的,而且在加载类之前static已经被申请了。
    • 静态代码块只执行一次
    • 执行顺序 静态代码块>匿名代码块>构造方法

    抽象类

    • 抽象类方法是一种约束,只有方法,没有方法的实现
    • 不能new抽象类,只能靠子类去实现它:约束
    • 抽象类中可以写普通方法
    • 抽象方法必须在抽象类中
    • 抽象类有构造器,抽象类存在的意义:将一些共有的方法抽象出来,提高代码开发率,防止代码重复。

    起到规范性的作用,一个项目组中往往是有多个人一起开发的,如果写到子类里面,不同的人写到方法名不同,这样看起来就没有规范性了

    thissuper关键字的作用

    • this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;

    • this可以调用成员变量,不能调用局部变量;

    • this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第 一条语句。而且在静态方法当中不允许出现this关键字。

    • super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)

    • super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

    final和abstract关键字的作用

    final和abstract是功能相反的两个关键字

    1. abstract可以用来修饰类和方法,不能用来修饰属性和构造方法;使用abstract修饰的类是抽象类,需要被继承,使

    2. 用abstract修饰的方法是抽象方法,需要子类被重写。

    3. final可以用来修饰类、方法和属性,不能修饰构造方法。使用final修饰的类不能被继承,使用final修饰的方法不能被 重写,使用final修饰的变量的值不能被修改,所以就成了常量。

    4. final修饰基本类型变量,其值不能改变,由原来的变量变为常量;但是fifinal修饰引用类型变量,栈内存中

      的引用不能改变,但是所指向的堆内存中的对象的属性值仍旧可以改变。

      举个栗子

      class Test { 
          public static void main(String[] args) { 
              final People people = new People("狂神"); 
              people.name = "秦疆";//正确 
              people = new People("秦疆");//错误 
          } 
      }
      
      
  • 相关阅读:
    Jenkins tomcat 一键发布 (三)
    Jenkins docker 一键发布 (二)
    Jenkins docker 一键发布 (一)
    jenkins构建maven项目:找不到本地依赖包的解决办法
    Linux socket编程示例
    Linux虚拟机环境搭建
    Linux vim 配置
    vs2013 Qt5.7.0环境安装搭建
    Linux下如何生成core dump 文件
    QT5新建工程错误->无法打开源文件QtWidgets/QApplication
  • 原文地址:https://www.cnblogs.com/g414056667/p/15254010.html
Copyright © 2011-2022 走看看