Java学习(上)

前言

暑假的时候学过一段时间的Java,但只是自己买一本书来看,书中的一大段一大段文字显得十分生硬,因此学完之后感觉自己对于一些概念还是一知半解。于是国庆假期我在慕课网重新学习了Java,一来是可以复习曾经学过的知识,二来是可以弄清楚自己曾经感到模糊的概念,三来还可以了解到各路大神对Java这门语言的见解,加深自己对其的认知与理解。下面我就整理了一些我认为在Java的学习过程比较关键的内容(这里只阐述一些基本概念,具体操作请参考本文最下方提供的参考资料):
一、类与对象


和我们所熟悉的C++一样,Java也是面向对象编程的语言,因此对象便是Java的核心。

一些概念:

对象:

在现实世界中,客观存在的事物就是对象,例如人类、书桌、计算机等。而对于计算机来说,面向对象就是指关注具体事物的信息。

类:

类是对象的类型,确定对象了对象拥有的特征行为,翻译成计算机语言就是属性方法类是具有相同属性和方法的对象的集合,可以把多个具有相同属性和方法的对象有一个类来表示。但和对象不同,类并不是客观存在的事物。

对象的属性:

对象的属性就是对象具有的各种特征,而对于每个对象来说,每个特征都具有特定值。

对象的方法:

对象的方法就是对象执行的操作,也可以理解为对象能干什么。

说了一大堆概念,下面举一个更直观的例子来说明:手机是一个总称,可以把它看成是一个类,而具体到某一品牌某一型号的手机则是手机类中的一个对象。以最新的苹果产品iPhone7为例(我真的没有在卖广告),它的屏幕有大小、内存有大小、还有价格,因此屏幕、内存和价格便是它这个对象的特征(属性),而屏幕的大小、内存的大小、具体的价格就是特征的值(属性值);除了这些,iPhone7还有打电话、发短信的功能,这便是它这个对象的行为(方法),即能打电话、能发短信。试想一下,是不是所有手机都有屏幕、内存和价格这些特征,都有打电话、发短信这些行为呢(当然有些手机功能更先进,会拥有其它手机没有的功能,这要用到接口的概念,以后将会介绍)?可想而知是的,因此手机便是一个类,而iPhone7就是手机类中的一个具体对象。同样,三星Note 7 、华为P9这些手机也是手机类中的具体对象。

成员变量和局部变量:

成员变量在类中定义,用来描述对象的属性;局部变量在类的成员方法中定义,用来存放临时数据。
区别:

  • 作用域:成员变量的作用域为整个类;局部变量的作用域为所在的成员方法
  • 初始值:Java会给成员变量赋一个初始值,但不会给局部变量赋一个初始值(这一点比较容易忽略的,如果不给局部变量赋初始值,则程序会报错)
  • 名称:在同一个方法中不能有同名的局部变量,但在不同的方法中可以有同名的局部变量(局部变量的作用域能很好地解释这一点:第一个方法中的局部变量并不会在第二个方法中生效。因此同名的两个(或多个)局部变量是不同的局部变量,只不过名称相同罢了)
  • 优先级:当成员变量和局部变量同名时, 局部变量具有更高的优先级(这在Java中是允许的,但调用这个局部变量时优先取局部变量的值而不是成员变量的值)
构造方法:

构造方法是定义类中用来初始化对象方法。与上面介绍的对象的方法有所不同,构造方法不代表对象能干什么,但它能创建这个对象并给对象初始化。
在创建对象的过程中,用new关键字来创建:类名 对象名 = new 类名() 。这里的类名()其实就是调用这个类的无参构造方法(不管是有参还是无参,构造方法都与类同名)。
注意:

  • 当没有指定构造方法时,系统会自动调用无参的构造方法
  • 当指定了构造方法时,无论这个方法是有参的还是无参的,系统都不会调用无参的构造方法(举个例子,通过两种构造方法来初始化对象:类名 对象名 = new 类名()类名 对象名 = new 类名(参数类型 参数名),如果此时已经定义了有参(或者无参)的方法的话,类名 对象名 = new 类名()这里系统就会报错,即系统不会调用原本默认的无参的构造方法来创建对象,只能通过已定义的有参(或者无参)的构造方法来创建对象)
  • 构造方法不但可以给对象的属性赋值(即初始化对象), 还能够保证给对象的属性赋一个合理的值(举个例子,现实生活中我们知道如今手机屏幕的大小不可能为负数,也不可能太大,因此当我们定义一个有参的构造方法的时候就可以给手机的屏幕大小这一属性赋一个合乎常理的值,当传入的参数小于0或者大于8(单位为英寸),就可以通过构造方法强制把屏幕大小设定为一个正常值)
权限修饰符:

权限修饰符控制着对类、类的成员变量和类的成员方法的访问,种类和作用范围如下图所示:

权限修饰符的种类和作用范围

对类和对象的操作:

定义类:

简单来说,定义Java中的类分为三个步骤:
1.定义访问权限、类名等
2.编写类的属性
3.编写类的方法

即为:

[权限修饰符] class 类名{
    //属性(成员变量)
    [权限修饰符] 属性1的类型 属性1;
    [权限修饰符] 属性2的类型 属性2;
    [权限修饰符] 属性3的类型 属性3;
    ...
    //方法
    方法1;
    方法2;
    方法3;
    ...
}

注意:

  • 这里的属性和方法可为一个或多个,也可以没有
  • 类名通常以大写字母开头
  • []代表可有可无的内容,下同
定义属性:

定义属性就是声明变量赋初始值
注意:如果变量有初始值就赋初始值,无初始值则赋0(int型、long型)或者0.0(double型)或者" "(String型),以此类推。

定义方法:
[权限修饰符] 返回值类型 方法名(参数类型 参数名){
    //方法体
    return 返回值;
}

注意:

  • 方法名后的括号内容可以为空,即代表无参的方法
  • 方法也可以无返回值,此时返回值类型为void
  • 方法体可以为空
  • 返回值的类型一定要与第一行所声明的返回值类型相符,否则程序会报错
  • 方法名如果由多个单词构成,不使用下划线,而是除第一个单词外其余单词首字母大写,其余字母均小写,以此区分
调用对象的属性:

对象名.属性

调用对象的方法:

对象名.方法名()

二、封装

首先要强调,面向对象同时也是Java三大特性:封装继承多态

封装:

封装是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问,只能通过该类提供的成员方法来实现对这些信息的访问与操作。这样使得外部程序只能通过规定的方法访问和操作类中的数据,提高了程序的安全性。
封装的实现步骤为:
1.修改成员变量(属性)的可见性(将权限修饰符设为private,即只能在本类中调用)
2.创建getter和setter方法,用于属性的读写(这里不必纠结于这两种方法的名称,知道它们的具体代码和作用就好。实际上只要正确,用其他方法也可以实现属性的读写,但规范来说应使用getter和setter方法)
3.在getter和setter方法中加入一些控制语句,对属性值是否合法(合乎常理)进行判断

this关键字:

在Java中,this关键字被隐式地用来引用本类中的成员变量和成员方法,常常与封装联系起来使用。

现在以上文提到的手机类为例描述封装的具体实现,先定义Phone类:

package com.project;//声明包
public class Phone{//定义Phone类
    private float screen;//定义屏幕属性(单位为英寸)
    private float CPU;//定义内存属性(单位为G)
    private int price;//定义价格属性(单位为元)
    //这里封装了3个属性,用private修饰它们的访问权限
    public float getScreen(){//定义screen属性的getter方法
        return screen;//返回screen属性的值
    }
    public void setScreen(float screen){//定义screen属性的setter方法
        this.screen = screen;//把screen属性的值设置为传入的参数的值
    }

}

这样就定义好了Phone类中screen属性的getter和setter方法,外部程序可以通过对象名.getScreen()对象名.setScreen(float型数据)来获得对象的screen属性值和设置对象的screen属性值。
PS:利用开发工具(Eclipse、Myeclipse)能快速创建getter和setter方法,小伙伴们可以自行试试应该怎么操作。
在倒数第三行代码中出现了this关键字,在这里它的作用是引用phone类中的成员变量screen,而this.screen = screen语句中第二个screen是指形参screen,这条语句的作用就是将形参screen的值赋给成员变量screen。由于它们同名,因此需要使用this关键字来区分它们。
此外,this关键字还可以引用本类中的成员方法,还是以上文的Phone类为例:

package com.project;
public class Phone{
    ...
    public void call(){//定义无参无返回值的call方法
        System.out.println("手机具有打电话的功能");//打印输出“手机具有打电话的功能”这句话
    }
    public void sendMessage(){//定义无参无返回值的sendMessage方法
        System.out.println("手机具有发短信的功能");//打印输出“手机具有发短信的功能”这句话
    }
    public void function(){//定义无参无返回值的function方法
        System.out.println("手机具有以下功能");
        this.call();
        this.sendMessage();
    }
}

新建一个项目测试类用于测试功能的实现:

package com.project;
public class Test {
    public static void main(String[] args) {
        Phone iPhone7 = new Phone();//创建Phone类对象iPhone7
        iPhone7.function();调用iPhone7的function()方法
}
}

控制台界面会输出以下信息:

控制台显示

说明this关键字既可以引用本类中的成员变量,又可以引用本类中的成员方法。

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,196评论 0 2
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,584评论 4 12
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,603评论 0 11
  • 清风,微雨,水花打着转儿。 门很低,手伸起来, 刚好就碰到了。 房子一定孤单极了, 所以, 一直想着 你和我。 闪...
    听晓风语阅读 135评论 0 0