Java程序猿之面向对象(上)

  定义类

  面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance)。

  类是某一批对象的抽象,也可以把类理解为某种概念;对象时一个具体存在的实体。

  类和对象是面向对象的核心。

  Java语言定义类的简单语法如下:

[修饰符] class 类名{
  零个到多个构造器定义……
  零到多个成员变量
  零到多个方法
}   

  上面修饰符可以是public、final、abstract,或者完全省略这三个修饰符。

  类名只要是一个合法的标识符就可以,但是为了程序的可读性来讲,Java类型必须由一个或多个具有意义的连缀而成的,每个单词首字母大写,其它字母全部小写,单词之间不要使用任何分隔符。

  一个类定义,可以包含三种常见的成员:构造器、成员变量和方法。

  static修饰的成员不能访问没有static修饰的成员。

  成员变量用于定义该类或该类实例所包含的状态数据,方法用于定义该类或该类的实例行为特征或功能实现。构造器用于构造该类的实例,Java语言通过new关键字来调用构造器。构造器是一个类创建对象的根本途径,没有构造器,就无法创建实例。Java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。

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

  修饰符:修饰符可以省略,也可以是pubic、protected、private、static、final其中public、protected、private只能出现一个,可以和static、final组合来修饰成员变量。

  类型:Java允许的任何数据类型

  成员变量名:一个合法的标识符就可以,但是可读性将建议首字母小写,后面每个单词的首字母大写。

  默认值:定义成员变脸更可以指定一个可选的默认值。

//定义方法
[修饰符] 方法返回值类型 方法名 [形参列表]{
  一个或者多个可执行性语句组成方法体
}

  修饰符:修饰符可以省略,也可以是public、protected、private、static、final、abstract,其中public、protected、privete只能出现一个,abstract和final最多只能出现一个,可以组合与static修饰方法。

  方法返回值类型:返回值类型可以是Java语言允许的任何数据类型,如果声明了方法返回值类型,则方法体类必须有一个有效的return语句。如果方法没有返回值,则必须使用void声明没有返回值。

  方法名:方法名的命名规则与成员变量的命名规则基本相同,但由于方法用于描述该类或该类的实例的行为特征或功能实现,因此建议用动词开头。

  形参列表:形参列表用于定义该方法可以接受的参数,形参列表由零组到多组“参数类型 形参名”组合而成,用逗号隔开。指定了形参列表,调用方法时必须传入对应的参数值。

  方法体内多条可执行性语句直接有严格的执行顺序,排在方法体前面的语句总是先执行的。

  static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而不是该类的实例,通常把static修饰的成员变量和方法也称为类变量、类方法,也可以称为静态变量、静态方法。不使用static修饰的普通方法,成员变量则属于该类的单个实例,而不属于该类。通常把不用static修饰的成员变量和方法称为实例变量、实例方法,也可以称为非静态变量、非静态方法。静态成员不能直接访问非静态成员。

  static真正的作用是区分成员变量、方法、内部类、初始化块,这四种成员到底属于类本身还是属于实例。在类中定义的成员,static相当于一个标志,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例。

  构造器是一个特殊的方法

[修饰符] 构造器名 (形参列表)
{
  //零个多个可执行性语句的构造器执行体
}

  修饰符:修饰符可以省略,也可以是public、protected、priveate其中之一

  构造器名:构造器名必须和类名相同。

  形参列表:和定义方法形参列表格式完全相同。

  构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或者用void声明,编译不会出错,但是Java会把这个构造器当成方法来处理——它就不再是构造器。

  为什么不能用void定义构造器?实际上构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值,因此构造器的返回值类型总是当前类,无须订单返回值类型。但必须注意的是:不要在构造器里显式使用return来返回当前类的对象,因为构造器的返回值是隐式的。

  系统默认构造器

public class PersonTest{
    String name;
    int age
    //系统提供默认的构造器,这个构造器是没有参数的
    //PersonTest(){}
    public static void main(String[] args){

        }
    }

  Java的类大致有如下作用:定义变量、创建对象、调用类的类方法或访问类的类变量。

  对象的产生和使用

  创建对象根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。

Person P = new Person();
//或者
Person P;
P = new Person();

  Java对象的作用:访问对象的实例变量和调用对象的方法。

  访问权限允许的话,类里定义的方法和成员变量都可以通过类或实例来调用。类或实例访问方法或者成员变量的语法是:类.类变量/方法,或者实例.实例变量/方法,在这种方式中,类或实例是主调者,用于访问该类或该实例的的成员变量或方法。

  static修饰的方法或者成员变量,既可通过类来调用,也可通过实例来调用;没有使用static修饰的普通方法和成员变量,只能使用实例来调用。

  类是人类,人是实例,类不是具体的存在而是多个实例的特征。

  对象、引用和指针

  类是一种引用类型数据,因此程序里定义Person类型的变量实际上是一个引用,它被存放在栈内存中,被指向一个实际的Person对象,而真正的Person对象被方法堆内存中。栈内存里的引用变量并没有真正存储对象的成员变量,对象的尘缘变量数据实际存放在堆内存里,而引用变量只是指向该堆内存里的对象。和C的指针很像,都是存储一个地址,通过地址引用对象。

  当一个对象被创建成功以后,这个对象将保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。不管数组还是对象,都只能通过引用来访问它们。

  不管是数组还是对象,当程序访问引用变量的成员变量或方法时,实际上是访问该变量所引用的数组、对象的成员变或者方法。

  如果希望通知垃圾回收机制回收某个对象,切断引用变量和它的联系就好,赋值为null。

  

  

  

时间: 2024-10-14 14:37:21

Java程序猿之面向对象(上)的相关文章

Java程序猿学习当中各个阶段的建议

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个

Java程序猿的JavaScript学习笔记(1——理念)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

其实本来真的没打算写这篇文章,主要是我得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.我自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问我的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前我写过一篇文章,但是那篇文章更多的是在讨论"面试前该不该刷题"这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而

Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Ja

Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Ja

[转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )

7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的学习Java,里面包含有很多好的代码示例.第三版仍旧是免费的,直到第四版才开始收费,不过仍旧值得买一本收藏. Think in Java 免费下载: Thinking in Java 2. The Java Tutorials 这个教程来自于Oracle/Sun.对于初学者是不错的选择.我们可以根据

Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log

1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server在Linux上,工作机是Windows, 所以我用的工具主要是Linux上的一些命令行工具,当然他们在Windows上也能够用,详细看以下的工具篇. 先声明,我仅仅是很普通的Linux用户,所以假设有些Linux命令或者工具用的不高效,请大家教育我. 题外话:我的观点是作为一个Java程序猿,仅仅须

JAVA程序猿怎么才干高速查找到学习资料?

JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站点,整合了非常多程序相关的资源,比如有一个"精简导航",依照语言的分类,整合了非常多的学习资源,网址是http://www.brieftools.info/ ,我们仅仅须要进入导航站,找到JAVA相应的资源就可以.导航上还有非常多其它语言的资源,假设后期准备学站点相关的东西,导航上面也有相