Java 面向对象

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  ——  数组越界异常

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 学习Java的进阶过程,是理解面向对象的思想,掌握面向对象的基本原则以及Java面向对象基本实现原理,熟练使用封装...
    Yumi__扶醉入香闺阅读 1,285评论 0 4
  • 一、初步理解 面向对象是相对面向过程而言的。面向过程强调的是过程的行为功能。(例如:C 语言就是一门面向过程的语言...
    陈凯冰阅读 311评论 0 1
  • 标签(空格分隔): Java面向对象 问题思考 什么是面向对象? 为什么要面向对象? 怎么面向对象? 问题解决 什...
    outSiderYN阅读 1,015评论 0 7
  • 标签(空格分隔): Java面向对象 1. 面向对象的特征有哪些方面? 抽象:抽象就是找出一些事物的相似和共性之处...
    outSiderYN阅读 6,343评论 0 6
  • vue 路由 model 没有使用history 路由会多出#, 设置之后 遇到了一个更诡异的问题 会在路由之后自...
    大尾巴蚂蚁阅读 724评论 0 1