zoukankan      html  css  js  c++  java
  • java面向对象(上)

    一.一些重要的概念理解

            Java是面向对象的程序设计语言,提供了类,成员变量,方法等的基本功能。类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量。它会引用到类的对象。类用于描述客观世界某一类对象的共同特征,而对象是类的具体存在,Java使用类的构造器来创建该类的对象。

           构造器。构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器包含了相同的初始化代码,则可以将这些代码提取放在普通初始代码块里完成,初始代码块总在构造器执行之前被执行。除此以外,Java还提供静态初始化块,用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要初始化时,系统会同时初始化该类的所有父类。

           Java支持面向对象的三大特征:封装,继承,多态。java提供了private,protected和public三个访问控制修饰符来实现良

    好的封装,提供了extends关键字来让子类继承父类,子类继承父类可以继承到父类的成员变量和方法。如果访问控制允许,

    子类实例可以直接调用父类里定义的方法,继承是实现类复用的重要手段,除此以外,也可以通过组合关系实现这种复用

    二.类与对象

         类和对象是面向对象的核心。类可以用public,final,abstract,或者省略这三个修饰符。类名使用一个合法的标识符,

    通常由单词连缀而成,每个单词的首字母要大写,其他字母小写。系统在第一次使用类时加载类。

          类中可以包含四中常见的成员,构造器,成员变量,方法,代码块。每种成员可以定义零个到多个 。类的各成员之间可以使用static修饰,代表这个成员是属于该类的,不是属于对象。static修饰的成员不能访问没有static修饰的成员

           构造器是类创建对象的根本途径。如果程序员没有为类编写构造器,则系统会为该类提供一个默认的构造器,一旦程序

    员为该类提供了构造器,则系统不会再提供构造器。Java通过new关键字调用构造器,返回该类的实例,并为实例开辟内存空间。

             成员变量的语法格式如下:

    修饰符 类型 成员变量名=[默认值]

           语法说明:修饰符可以省略。可以使用的修饰符包括public,protected,private,static,final,其中public,protected,private

         三个只能出现其中之一,可以与static,final组合修饰。定义成员变量可以指定一个默认值。

           定义成员方法语法格式如下

    [修饰符] 方法返回值类型 方法名(形参列表){
    
           语句代码块
    }

           语法说明:修饰符可以省略,可以使用的修饰符有public,private,protected,static,final,abstract,其中public,private,protected三者只能使用其中之一,abstract和final只能出现其中之一。它们都可以与static组合修饰。

           注意点:static是一个特殊的关键字,使用它修饰的成员变量,代码块和方法表明它是属于类的,不是属于某个实力的

          定义构造器的语法格式如下:

    [修饰符] 构造器名(形参列表){
        初始化语句块
    }

            语法说明:修饰符可以省略,可以使用修饰符有public,protected,private,这三个修饰符不能同时使用。构造器名

     与类名一致,没有返回值类型。如果加上了返回值,java会将所谓的构造器当成方法处理

    三.对象的内存机制

             通过new关键字创建对象以后,就可以通过对象访问对象的成员变量和方法了,访问对象成员的语法是:实例变量名.成员,static修饰的方法和成员变量既可以通过类来调用也可以通过实例来调用,没有static修饰的方法和成员变量只能通过实例

    来调用。

          类是一种引用数据类型,创建对象以后,它的变量是一个引用,存放的是指向堆内存的实例对象,而引用本身存放的是一个引用地址,在栈内存中。Java不允许程序直接访问堆内存中的对象,只能通过该对象的引用操作该对象。堆内存的对象可以有多个引用。

    四.对象的this引用

          this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认有两种情形

          1.构造器中调用该构造器正在初始化的对象

          2.在方法中调用该方法的对象,哪个实例调用这个方法,this就代表谁

         Java允许可以省略this前缀,但这个this还是存在的。特殊情况是当方法中的某一个局部变量与全局变量名相同时,则this

        不能省略。

    五.方法详解

               在Java中不能单独定义一个方法,方法必须定义在类体内。如果方法用static修饰,则这个方法属于类,否则这方法属   于类的实例。

             Java语言是静态的,只要不在重新编译这个类文件,该类和该类的对象所拥有的方法是固定的,永远不会改变。

             方法的参数传递。调用方法必须使用类和实例作为主调者,如果声明方法时包含了形参声明。则调用方法时必须给这些

       形参指定参数值,调用方法时实际传给形参的参数值也被称为实参。方法的参数传递方式只有一种:值传递。所谓值传递,就是将参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。

           下面程序演示了值传递的演示效果:

    public static void swap(int a,int b){
           int temp=a;
           a=b;
           b=temp;
           System.out.println("swap方法里,a的值是"+a+",b的值是"+b);
    
        }
        public static void main(String[] args) 
        {
            int a = 6;
            int b = 9;
            swap(a,b);
            System.out.println("交换结束后,a的值是"+a+",b的值是"+b);
        }

    输出:

    swap方法里,a的值是9,b的值是6

    交换结束后,a的值是6,b的值是9

             从上面运行结果来看,交换结束后后,变量a,b的值没有改变。验证了正如前面所讲的swap方法里的a,b是main方法变量

    a,b的复制品。swap方法没有操作a,b本身,值是操作他们的复制品。

            Java中对于引用类型的参数传递,一样采用的是值传递的方式,将引用变量的副本传入方法内,引用变量副本与变量本身都是指向同一个对象的地址,所以方法操作该副本其实改变了实际对象。

           从JDK1.5之后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后加(...),表示该形参接受多个参数值,多个参数值被当成数组传入。代码演示如下:

    public class ObjectOriented 
    {
    public static void test(int a,String... books){
    for(String tem:books){
    System.out.println(tem);
    }
    System.out.println(a);
    }
    
    
    public static void main(String[] args){
    
    String[] books={"Ajax","Spring","Hibernate"};
    test(5,books);
    
    
    }
    }
    
    
    
    
    }

    递归方法

          一个方法体内调用它自身,被称为方法递归。方法递归包含了一个隐式循环,它会重复执行某段代码,但这种重复无需

      循环控制,所以为了避免死循环,递归一定要向已知方向递归。递归是非常有用的。例如遍历某个路径下的所有文件

    方法重载

           Java允许同一个类里定义多个同名方法,只要形参列表不同就行。只要一个类中包含了两个或两个以上方法名相同,但形参列表不同,则被称为方法重载。

            方法重载只与方法名,形参列表有关系,与方法其他部分无关。概括就是“两同一不同”,即同一个类中方法名相同,形参列表不同。Java在一个类中定义了多个构造器,其实就是方法的重载。

            类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同,类变量通过(类.变量名)访问,实例也可以通过类访问类变量(实例.变量名);而实例变量从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同,实例变量通过(实例.变量名)访问。类变量和实例变量统称为成员变量,成员变量无需显式初始化,系统在类的准备阶段或者创建实例时进行默认初始化。

          局部变量的有效范围:形参在整个方法内有效,方法局部变量和代码块局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效,即紧跟的右花括号处失效。

          与成员变量不同的是,局部变量除了形参之外,都必须显式初始化,也就是说必须指定初始值才可以使用。

          Java允许局部变量和成员变量同名。

  • 相关阅读:
    互联网实习笔记之shell笔记
    互联网实习笔记之30天总结
    记被论文排版虐的一天
    大论文排版技巧
    Matlab2014a使用VS2015混合编译
    腾讯云服务器创建swap空间
    使用vs2015开发linux:Ubuntu程序
    使用VS2015远程GDB调试
    nullptr、NULL、null和0
    《将博客搬至CSDN》
  • 原文地址:https://www.cnblogs.com/yumiaoxia/p/8857193.html
Copyright © 2011-2022 走看看