一.一些重要的概念理解

Java是面向对象的程序设计语言,提供了类,成员变量,方法等的基本功能。类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量。它会引用到类的对象。类用于描述客观世界某一类对象的共同特征,而对象是类的具体存在,Java使用类的构造器来创建该类的对象。

构造器。构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器包含了相同的初始化代码,则可以将这些代码提取放在普通初始代码块里完成,初始代码块总在构造器执行之前被执行。除此以外,Java还提供静态初始化块,用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要初始化时,系统会同时初始化该类的所有父类。

Java支持面向对象的三大特征:封装,继承,多态。java提供了private,protected和public三个访问控制修饰符来实现良

好的封装,提供了extends关键字来让子类继承父类,子类继承父类可以继承到父类的成员变量和方法。如果访问控制允许,

子类实例可以直接调用父类里定义的方法,继承是实现类复用的重要手段,除此以外,也可以通过组合关系实现这种复用

二.类与对象

     类和对象是面向对象的核心。类可以用public,final,abstract,或者省略这三个修饰符。类名使用一个合法的标识符,

通常由单词连缀而成,每个单词的首字母要大写,其他字母小写。系统在第一次使用类时加载类。

类中可以包含四中常见的成员,构造器,成员变量,方法,代码块。每种成员可以定义零个到多个 。类的各成员之间可以使用static修饰,代表这个成员是属于该类的,不是属于对象。static修饰的成员不能访问没有static修饰的成员

构造器是类创建对象的根本途径。如果程序员没有为类编写构造器,则系统会为该类提供一个默认的构造器,一旦程序

员为该类提供了构造器,则系统不会再提供构造器。Java通过new关键字调用构造器,返回该类的实例,并为实例开辟内存空间。

成员变量的语法格式如下:

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

语法说明:修饰符可以省略。可以使用的修饰符包括public,protected,private,static,final,其中public,protected,private

三个只能出现其中之一,可以与static,final组合修饰。定义成员变量可以指定一个默认值。

定义成员方法语法格式如下

[修饰符] 方法返回值类型 方法名(形参列表){

       语句代码块
}

语法说明:修饰符可以省略,可以使用的修饰符有public,private,protected,static,final,abstract,其中public,private,protected三者只能使用其中之一,abstract和final只能出现其中之一。它们都可以与static组合修饰。

注意点:static是一个特殊的关键字,使用它修饰的成员变量,代码块和方法表明它是属于类的,不是属于某个实力的

定义构造器的语法格式如下:

[修饰符] 构造器名(形参列表){
初始化语句块
}

语法说明:修饰符可以省略,可以使用修饰符有public,protected,private,这三个修饰符不能同时使用。构造器名

与类名一致,没有返回值类型。如果加上了返回值,java会将所谓的构造器当成方法处理

三.对象的内存机制

         通过new关键字创建对象以后,就可以通过对象访问对象的成员变量和方法了,访问对象成员的语法是:实例变量名.成员,static修饰的方法和成员变量既可以通过类来调用也可以通过实例来调用,没有static修饰的方法和成员变量只能通过实例

来调用。

类是一种引用数据类型,创建对象以后,它的变量是一个引用,存放的是指向堆内存的实例对象,而引用本身存放的是一个引用地址,在栈内存中。Java不允许程序直接访问堆内存中的对象,只能通过该对象的引用操作该对象。堆内存的对象可以有多个引用。

四.对象的this引用

this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认有两种情形

1.构造器中调用该构造器正在初始化的对象

2.在方法中调用该方法的对象,哪个实例调用这个方法,this就代表谁

Java允许可以省略this前缀,但这个this还是存在的。特殊情况是当方法中的某一个局部变量与全局变量名相同时,则this

不能省略。

五.方法详解

在Java中不能单独定义一个方法,方法必须定义在类体内。如果方法用static修饰,则这个方法属于类,否则这方法属   于类的实例。

Java语言是静态的,只要不在重新编译这个类文件,该类和该类的对象所拥有的方法是固定的,永远不会改变。

方法的参数传递。调用方法必须使用类和实例作为主调者,如果声明方法时包含了形参声明。则调用方法时必须给这些

形参指定参数值,调用方法时实际传给形参的参数值也被称为实参。方法的参数传递方式只有一种:值传递。所谓值传递,就是将参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。

下面程序演示了值传递的演示效果:

public static void swap(int a,int b){
int temp=a;
a=b;
b=temp;
System.out.println("swap方法里,a的值是"+a+",b的值是"+b); }
public static void main(String[] args)
{
int a = 6;
int b = 9;
swap(a,b);
System.out.println("交换结束后,a的值是"+a+",b的值是"+b);
}

输出:

swap方法里,a的值是9,b的值是6

交换结束后,a的值是6,b的值是9

从上面运行结果来看,交换结束后后,变量a,b的值没有改变。验证了正如前面所讲的swap方法里的a,b是main方法变量

a,b的复制品。swap方法没有操作a,b本身,值是操作他们的复制品。

Java中对于引用类型的参数传递,一样采用的是值传递的方式,将引用变量的副本传入方法内,引用变量副本与变量本身都是指向同一个对象的地址,所以方法操作该副本其实改变了实际对象。

从JDK1.5之后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后加(...),表示该形参接受多个参数值,多个参数值被当成数组传入。代码演示如下:

public class ObjectOriented
{
public static void test(int a,String... books){
for(String tem:books){
System.out.println(tem);
}
System.out.println(a);
} public static void main(String[] args){ String[] books={"Ajax","Spring","Hibernate"};
test(5,books); }
} }

递归方法

      一个方法体内调用它自身,被称为方法递归。方法递归包含了一个隐式循环,它会重复执行某段代码,但这种重复无需

循环控制,所以为了避免死循环,递归一定要向已知方向递归。递归是非常有用的。例如遍历某个路径下的所有文件

方法重载

Java允许同一个类里定义多个同名方法,只要形参列表不同就行。只要一个类中包含了两个或两个以上方法名相同,但形参列表不同,则被称为方法重载。

方法重载只与方法名,形参列表有关系,与方法其他部分无关。概括就是“两同一不同”,即同一个类中方法名相同,形参列表不同。Java在一个类中定义了多个构造器,其实就是方法的重载。

类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同,类变量通过(类.变量名)访问,实例也可以通过类访问类变量(实例.变量名);而实例变量从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同,实例变量通过(实例.变量名)访问。类变量和实例变量统称为成员变量,成员变量无需显式初始化,系统在类的准备阶段或者创建实例时进行默认初始化。

局部变量的有效范围:形参在整个方法内有效,方法局部变量和代码块局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效,即紧跟的右花括号处失效。

与成员变量不同的是,局部变量除了形参之外,都必须显式初始化,也就是说必须指定初始值才可以使用。

Java允许局部变量和成员变量同名。

java面向对象(上)的更多相关文章

  1. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...

  2. Java面向对象 集合(上)

     Java面向对象  集合(上) 知识概要:             (1)体系概述 (2)共性方法 (3)迭代器 (4)list集合 (5)Set 集合 体系概述:              集 ...

  3. java第三节 面向对象(上)

    //第三讲 //面向对象(上) /* 理解面向对象的概念 面向过程 在一个结构体中定义窗体的大小,位置,颜色,背景等属性,对窗口操作的函数窗口本身的定义没有任何关系 如HideWindow, Move ...

  4. 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)

    091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  5. 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现

    111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  6. 【Java基础】面向对象上

    面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...

  7. java面向对象编程(上)

    java面向对象学习的三条主线 1.Java类及类的成员:属性.方法.构造器.代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.stat ...

  8. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

  9. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  10. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

随机推荐

  1. 关于Cocos2d-x的动作和动画

    1.动作,在cocos2d-x中有非常多种的动作,各种移动,旋转,缩放,淡入淡出....等等非常多,但是这些动作只是作用于节点,最常作用于的就是精灵节点.而且我们可以把很多个动作放进一个Sequenc ...

  2. jenkins配置过程遇到的问题

    jenkins 搭建完成后,可以浏览器访问: http://localhost:8081/jenkins, 新建任务过程中遇到以下问题: 1. 源码管理不现实git, 只显示无 解决: 插件管理 -  ...

  3. php -- php控制linux关机、重启、注销

        php 里面有个 system(exec) 方法, 可以调用系统命令.     重启先建立一个脚本(比喻 /root/reboot_server.sh ),重启用的.//路径可随便,但最少必须 ...

  4. linux配置java环境

    第一步: vim /etc/profile 第二步:添加以下4行 第三步:使配置生效 source /etc/profile 结束配置

  5. 学习 TList 类的实现[8]

    现在准备建立 Items 数组属性; 在 public 区输入下面代码:property Items[Index: Integer]: Pointer; 执行 Shift+Ctrl+C 后的代码是: ...

  6. 手机web不同屏幕字体大小高度自适应

    body{font-size:0.6rem:} <script> //使用rem策略,不断更新html的fontsize (function(){     function sizeHtm ...

  7. js判断用户关闭页面或浏览器

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  8. mysql数据库中,通过一条insert into语句,同时插入多个值

    需求描述: 今天在看一本mysql的书籍,发现一个mysql中insert into好用的技巧,就是通过 1条insert into语句,插入多行数据,而不是多个insert into语句.在此记录下 ...

  9. web.xml 中的listener、filter、servlet 加载顺序及其【配置详解】

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  10. GIS-006-ArcGIS API 空间关系

    Name Description 解释 SPATIAL_REL_CONTAINS Part or all of a feature from feature class 1 is contained ...