Javase系列之面向对象(一)
作为一个Java程序员,我们每天做的事情就是OOP(面向对象),可以说万物皆对象,Java是一门面向对象的程序语言,鉴于基本的面向对象知识也是一个较为庞杂的模块,所以博主我准备用多篇文章去介绍Java中的面向对象基础,希望能给初学者提供帮助。
作为OOP类型的程序语言,Java中最重要的两个概念就是类(class)和对象(object),我们有时候也将对象称之为实例(instance)。类,是某一批对象的抽象,我们可以把他看做成高中数学中的集合,而对象(实例)则是一个具体存在的实体,我们可以将对象看成集合中的元素。类的定义如下所示:
[修饰符] class 类名{
零到多个构造器定义....
零到多个成员变量....
零到多个方法....
}
由上所知,在类中包含三类常见的成员:构造器,成员变量,方法。现在我们先从这三个成员入手,去了解Java中的类。
构造器:构造器是一个类创建对象的基本途径,如果一个类没有构造器,那么它无法创建实例,Java语言提供了一个功能,当程序员没有为类编写构造器的时候,系统会为这个类提供一个默认的构造器,一旦程序员为类编写了构造器,则系统不会再提供构造器。构造器的作用是在创建对象的时候执行初始化操作。如果你不是很理解,请看下面的例子:
public class Apple {
//我们先设置苹果的两个属性:产地和重量
public String producing_area;
public int weight;
//接下来我们要为这个苹果类提供构造器
public Apple(String producing_area, int weight){//小括号里的就是形参列表
this.producing_area=producing_area;
this.weight = weight;
}
//这个时候我们去实例化Apple类的时候就会包含两个参数
public static void main(String[] args) {
Apple apple = new Apple("云南",200);
//最后我们可以去访问我们为对象设置的两个参数
System.out.println("产地是:"+apple.producing_area+" "+"重量是:"+apple.weight+"g");
}
}
上述代码运行结果为:
产地是:云南 重量是:200g
由上述代码我们可以看出,我们为Apple类提供了构造器,这个构造器中有两个参数,我们在实例化这个类的时候可以设置与访问这两个参数。
关于构造器,我要为大家介绍一下构造器的重载。何为重载?构造器名相同,形参列表不同,我们就成为构造器的重载。例如我们刚刚说的Apple类,我们采取构造器重载的方式为这个类提供多种实例化的方式:
public class Apple {
public static String producing_area;
public int weight;
//接下来我们要为这个苹果类提供有参构造器
public Apple(String producing_area, int weight){
this.producing_area=producing_area;
this.weight = weight;
}
//我们为这苹果类提供一个无参的构造器
public Apple() {}
//这个时候我们就可以提供两种实例化Apple类的方式
public static void main(String[] args) {
Apple apple1 = new Apple("云南",20);
Apple apple2 = new Apple();
}
}
、 上述代码可以看出,构造器重载的目的是为了让类的实例化更加多元化,我们可以根据项目的需求去创建类的实例。
构造器说完了,我们接着说成员变量,我们在类中(注意:我后面会慢慢讲到Java变量的作用域)所创建的变量,是成员变量,成员变量分为两种,一种是以static修饰的类变量,类变量属于这个类,而没有用static修饰的变量是实例变量,实例变量属于这个类的某个实例。类变量是服务于类,而实例变量是服务于类的实例。所以当这个类在准备阶段,类变量就已经产生,当这个类被销毁的时候,类变量就被销毁。实例变量是在这个对象被创建的时候创建,在这个对象被销毁的时候销毁。一般来说,类访问类变量,实例访问实例变量,但是实例也可以访问类变量(其实在底层会转化成类访问类变量)。语法格式如下:类.类变量 实例.实例变量 实例.类变量。这里我想说的是,我们不能去用类去访问实例变量,原因很简单,Java虚拟机要优先去创建类,然后才去创建实例。那么有可能Java虚拟机创建完类之后,还没有来得及去创建实例变量,这时用类去访问实例变量会报错。最后我想告诉大家的是:成员变量无需显示初始化,我们随时使用成员变量随时可以为它赋值。(上面代码中就有定义实例变量与类变量,大家可以自行体会)
最后我为大家介绍一下方法,方法是类或者对象行为的抽象,什么意思呢?大多数方法会执行一个功能。方法不是独立的,它要么属于这个类,要么属于这个类的实例,也就是说方法不能独立运行,只能被类或者对象调用。方法的定义:
[修饰符] 方法返回值 方法名 (形参列表){
零到多条可执行语句.....
}
这里我给大家做代码演示的同时也将方法的重载向大家演示出来:
public class Test {
public void test(){
System.out.println("这是无参的方法...");
}
public void test(String a) {
System.out.println("这是重载的test方法"+" "+a);
}
public static void main(String[] args) {
Test t = new Test();
t.test();
t.test("test方法被重载了");
}
}
这里两个方法都是为了在控制台上打印一句话,这就是这个方法的功能,此处我们也用到了方法的重载,方法的重载就是方法名相同形参列表不同。最后为大家介绍一下方法的修饰符,方法的修饰符可以是:public protected private abstract static final 其中public protected private只能出现一个,可以与 static final组合修饰方法,但是abstract和final只能出现一个。方法的返回值类型可以是Java语言所包含的任意数据类型,包括基本数据类型和引用类型。
总结一下,今天我为大家简单的介绍了一下一个类中的三个常见的成员,明天我将继续为大家介绍Java中面向对象的其他有趣的内容,希望大家能有所收获。
由于本人水平有限,欢迎各位同行批评指正。
Javase系列之面向对象(一)的更多相关文章
- .net必问的面试题系列之面向对象
上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉. 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系 ...
- openresty开发系列23--lua面向对象
openresty开发系列23--lua面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构.java,c++,.net等都支持面向对 ...
- 面试系列<5>——面向对象
面试系列--面向对象思想 一.三大特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其成为一个不可分割的独立实体.数据被保护在抽象数据类型内部,尽可能地隐藏内部细节,只保留一些对外的接口 ...
- Jser 设计模式系列之面向对象 - 接口封装与继承
GOF在<设计模式>中说到:面向接口编程,而非面向实现编程 鉴于此,这个概念可见一斑! JS却不像其他面向对象的高级语言(C#,Java,C++等)拥有内建的接口机制,以确定一组对象和另一 ...
- 【小白的java成长系列】——面向对象基础
今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向 ...
- Java面向对象程序设计--与C++对比说明:系列1(面向对象基础)
面向对象程序设计作为一种重要的程序设计思想,在近些年来得到广泛的推崇.而Java和C++更是面向对象程序设计语言中的翘楚,要彻底摸清面向对象程序设计的精髓和在实际应用中更加高效的进行代码设计 ...
- 【新秀疯狂UML系列】——面向对象的技术
从软质工作开始,我们来到与面向对象的接触,接下来的学习材料似乎已经提到了面向对象,在与她的朋友去一个.所以,我们必须知道她多一点点. 一.何为面向对象? 面向对象(Object Oriented).是 ...
- Python系列之 - 面向对象(1)
python是一门面向对象的编程语言,python中的一切均是对象. 有对象就提到类,对象和类就像是儿子和老子的关系,是不可分的一对. 什么是类 类就是具有一些共同特性的事物的统称.好比人类, ...
- Python系列之 - 面向对象(2)
类的三大特性 类的三大特性包括: 封装.继承.多态 一 封装 封装就是将类所用到的所有字段.属性.方法都包含在类代码段里面,当实例调用直接调用类中的方法即可. class People(object) ...
随机推荐
- SPOJ 8093 JZPGYZ - Sevenk Love Oimaster
思路 可以用复杂度不对的做法水过去 相当于求parent树子树中的颜色种数,可以离线后树状数组(HH的项链,询问右端点排序之后维护last),dsu on tree,莫队都可以 但是也可以记录每个点上 ...
- OS X EI Captain 下解决 There was a problem confirming the ssl certificate 问题
参考: Problem Confirming the SSL Certificate - OSX OS X EI Captain 下解决 There was a problem confirming ...
- vue中import引入模块路径中@符号是什么意思
在编写vue文件中引入模块 import model from "@/common/model"; 这里路径前面的“@”符号表示什么意思? resolve: { // 自动补全的扩 ...
- ABP EventBus(事件总线)
事件总线就是订阅/发布模式的一种实现 事件总线就是为了降低耦合 1.比如在winform中 到处都是事件 触发事件的对象 sender 事件的数据 e 事件的处理逻辑 方法体 通过E ...
- VNPY加密教程(Python生成pyd文件)
安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...
- vi编程技巧:
h #向上j #向左k #向右l #向下a #插入o #插入一行,并在行首开始O #在当前行前插入一行,并在行首开始dd #删除当前行x #删除当前字符yy #复制当前行p #在当前行后面粘贴P #在 ...
- 《R语言入门与实践》第四章:R 的记号体系
这一章节将如何对 R 对象中的值进行选取,R 的符号规则有两种方式进行查询: 第一种记号体系:索引查询索引语法:deck[ , ](使用中括号)其中[ , ] 为索引,其中含有两个索引参数,用 &qu ...
- Idea 里明明配置了Tomcat,但是右上角任然没有Tomcat显示
问题截图如下: 上图明明配置了Tomcat,但是Idea右上角任然是Add Configurations 因为这个问题,困扰了好久.解决方法: 点击Add Configurations 出现如下界 ...
- 对XML里的属性或元素进行模糊搜索的方法
最近发现几个贴子都是问关于对XML的属性或元素进行模糊搜索的方法,在此发出代码片段示例,希望能够对你有所帮助:) 示例XML private var xml:XML=<employees> ...
- 现代 PHP 新特性 —— 闭包
一.概述 闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在.闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invok ...