美文网首页
Java 面向对象

Java 面向对象

作者: Ansaxnsy | 来源:发表于2017-08-08 22:23 被阅读0次

    Java 面向对象

    类?对象?

    定义类的语法格式:

    Field 定义的语法

    方法定义的语法::

    构造器定义的语法:

    成员变量:

    局部变量:

    this 关键字:

        1.定义类

        2.创建对象,调用方法

    类?对象?

        类:从某一类对象的【概念定义】。比如人类:所有抽象出来的概念定义

        对象:以该概念所产生【一个实例】,它就属于对象。

    Java程序中,类是最小的程序单位。

    所有Java程序,都必须从定义类开始

    定义类的语法格式:

    [修饰符] class 类名

    {

      …类体…//  0~N 个 Field 定义

                    //  0~N 个方法定义

                    //  0~N 个构造器定义

    }

    /*  一个类中, 最多只有 5 种成分  */

    [修饰符]   —   可以省略,可以是public  final    abstract

    类名        —   填空。语法角度来讲,只要是标识符即可。字母数字_$数字不开头

                                     从程序可读性角度来看,必须是多个有意义的单词连缀,每个单词首字母大写(通过类名就大致猜到这个类是做什么的)

    Field 定义的语法:

    [修饰符] 类型  field名 [ = 默认值];                       ([] 里可有可无)

    [修饰符]    —    可以省略,还可以是 public | protected | private(只能出现一个),static,final,transient  (暂时用不到)

    类型         —    不能省略。可以是基本类型,数组,任意类(JDK的类和自定义的类),接口,枚举

    field名      —    不能省略。语法角度来讲,只要是标识符即可。字母数字_$数字不开头

                                              从程序可读性角度来看,必须是多个有意义的单词连缀,第一个单词首字母小写,后面每个单词首字母大写(通过field名就大致猜到这个field是做什么的)

    [ = 默认值]   —    可以省略。默认值必须与它声明的类型是一致的。

    方法定义的语法:

    [修饰符]  返回值类型  方法名(0~N 多个形参声明)

    {

        //  0~N条可执行性的语句

       //  如果方法签名中有返回值类型声明,该方法里必须包含【有效的】 return 语句

    }

    [修饰符]  —    可以省略,还可以是 public | protected | private(只能出现一个),static,final | abstract(只能出现一个)

    返回值类型  —    不能省略。可以是基本类型,数组,任意类(JDK的类和自定义的类),接口,枚举。void 用于声明该方法没有返回值。

    方法名  —    不能省略。语法角度来讲,只要是标识符即可。字母数字_$数字不开头

                                          从程序可读性角度来看,必须是多个有意义的单词连缀,第一个单词首字母小写,后面每个单词首字母大写(通过方法名就大致猜到这个方法是做什么的)应该“动词”

    形参声明  —    每个形参都满足“[final]  类型  变量”的格式。

                            多个形参声明之间用英文逗号隔开。

    方法体  —    方法体中可执行性的代码。代码的执行是从上到下的。

    构造器定义的语法:

    [修饰符]    构造器名(0~N 多个形参声明)

    {

        //  0~N条可执行性的语句

    }

    [修饰符]  —    可以省略,还可以是 public | protected | private(只能出现一个)。

    构造器名  —    不能省略,必须与类名相同。

    形参声明  —    每个形参都满足“[final] 类型  变量”的格式。

                            多个形参声明之间用英文逗号隔开。

    构造器的执行体  —  执行体中放置可执行性的代码。代码的执行是从上到下的。

    构造器  可认为是一种特殊的方法,但构造器的作用,是用来产生对象的。

               ——通俗讲,当我们定义了一个类之后,就需要通过构造器来获取该类的实例。

    【构造器的注意点:如果程序员没有为类定义任何的构造器,系统会为类提供一个无参数的构造器。】

            static  —  字面翻译是“静态”

                            有        static 修饰的成员,属于类本身。而不是属于实例的。

                                       static 修饰的变量,是与类共存亡的。

                            没有    static  修饰的成员,属于实例。

                                        没有static 修饰的变量,是与实例共存亡的。

             局部变量,它本身既不可能属于实例,也不可能属于类。

                                 所以局部变量不能使用static 修饰。

    构造器详解:我是链接 

    /*

    成员变量:

    A:在类方法外

    B:在堆内存中

    C:随着对象的创建而存在,随着对象的消失而销毁

    D:有默认的初始化值

    局部变量:

    A:在方法定义中

    B:在栈内存中

    C:随着方法的调用而存在,随着方法的调用完毕而销毁

    D:没有初始化的值,使用前必须定义和赋值

    */

      以后,如果自己写Java程序

                           ——永远都不要使用对象去调用static修饰的方法、field

      你会看到别人的程序、考题,出现了使用对象去调用static 修饰的方法、field的情况。

                           ——当我们要阅读该程序,解答该题时,先把对象换成类。

    【Java 允许通过实例来调用 static 修饰方法、Field,本身是不应该的】

    引用变量一定存放在栈内存中  是错的,定义声明在哪里就在哪里

    成员变量:

    如果程序没有初始化,系统会对它进行初始化。

    初始化后的值是:如果是基本类型,初始值为 0 / 0.0  / \u0000 / false

                                 如果是引用类型,初始值为 null

    局部变量:

    1. 方法里的局部变量

    2. 形参

    3.代码块的局部变量

    局部变量的修饰符:    final

                     局部变量必须由程序员赋初始值

    this 关键字:

        1.this 引用    ——在任何非static修饰方法、构造器可用

                                    当this在方法中,this代表调用该方法的对象。

                                    当this在构造器中时,this代表该构造器正在初始化的对象。

        2.this 调用    ——只能在构造器的第一行出现

    Dog (应用 this) 程序 及 运行结果:

    public class Dog

    {

    // 代表狗胃中的食物量

    double foodAmount;

    String name;

    public void eat()

    {

    // this代表调用该方法的对象

    // this在该方法中代表的对象是不确定的

    // 直到该方法被调用时才确定下来,谁调用这个方法,this就代表谁

    this.foodAmount += 10;

    }

    public Dog(String name)

    {

    // this代表该构造器正在初始化的对象

    this.name = name;

    }

    public void info()

    {

    System.out.println("我的名字是:" + this.name);

    System.out.println("狗的食物为:" + this.foodAmount);

    }

    public static void main(String[] args)

    {

    // 调用构造器、方法时、参数值会传入构造器、方法中。

    Dog d = new Dog("旺财");

    Dog d2 = new Dog("毛毛");

    Dog d3 = new Dog("汪汪");

    d2.eat();

    d2.info();

    // d3的info方法

    d3.info();

    }

    /**

    语文 - 英语

    正常的句子,满足如下格式:

    主谓宾

    猪八戒吃西瓜  zhubajie eat xigua

    孙悟空飞      swk fly;

    在“面向对象程序设计语言”里,上面两个方法可写为:

    猪八戒.吃(西瓜);

    孙悟空.飞();

    孙悟空的年龄

    张三的狗

    */

    }

    Dog

    Apple 程序 :

    public class Apple

    {

        // Field 定义: [修饰符] 类型  field名 [ = 默认值];

        private int age;

        protected String name;

        static protected String[] subs;

        double weight = 56.3;

        int grade;

        // grade = 2;  // 不是field,不是方法,也不是构造器,是错的

    /*

        [修饰符]  返回值类型  方法名(0~N 多个形参声明)

        {

        //  0~N条可执行性的语句

        //  如果方法签名中有返回值类型声明,该方法里必须包含【有效的】 return 语句

        }

    */

        String sayHi(String name)

        {

            grade = 2;

            // 编译时候,if里只是一个boolean型的表达式,

            // 系统认为if里return是有可能不被执行的,因此这个return还算不上有效

            if(true)

            {

                return name + ",您好!";

            }

            else

            {

                return name + ",不好";

            }

            // 保证系统在编译阶段就识别到:至少有一条return语句被执行

            }

    }

    相当于自定义了一个 Apple 类,形成的 .class 文件,在以下的 AppleTest 程序中调用

    AppleTest 程序 及 运行结果:

    public class AppleTest

    {

        public static void main(String[] args)

        {

            // apple 是一个局部变量

            Apple apple; // Apple 是自定义的类

            // new 后面带的是构造器

            apple = new Apple(); // 创建一个Apple对象,并让apple引用变量指向Apple对象

            // Apple 对象存放在堆里。apple引用变量保存在main方法栈里

            // 要调用方法,就一定要满足对方的要求

            System.out.println(apple.sayHi("晚安啊越~"));

            // 使用局部变量之前,必须先赋初始值

            System.out.println(apple); // 打印对象,输出的“类名@hashCode值”

            // hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值

        }

    }


    AppleTest

    以上


    写在最后:

    总结一下最经遇到的两个错误:

    1.NullPointerException  ——  空指针异常    当程序访问一个 null 对象的实例方法或实例属性,程序就会引发这个异常

    2.ArrayIndexOutOfBoundsException  ——  数组越界异常

    下午效率极低,晚上到现在的效率还不错,难道我要改夜班吗,哭~

    外面雨好大啊,虽然床上没有美人等我,但是还是要回家的啊~

    金牛座的宝宝就是这样的吗,平时高冷的不行,这个时候我却感觉到了浓浓的爱意~哈哈哈哈,溜了~

    相关文章

      网友评论

          本文标题:Java 面向对象

          本文链接:https://www.haomeiwen.com/subject/mgcalxtx.html