一.一些重要的概念理解

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. QSignalMapper类处理多信号关联同一个槽的方法(2)

    例1: QSignMapper *mapper = new QSignMapper(this) QPushButton *btn1 = new QPushButton(this); btn1-> ...

  2. 关于Struts2的jsp页面的注释

    语句就算用<!-- -->注释后,还是会在编译的时候显示在网页上,而且网页还会报错,因为注释的那些语句也会去编译,也会去检查有没有错误,所以一些注释掉的过时的变量和方法也会导致报错.500

  3. bcm56150_i2c驱动分析

    本文主要关注bsp中,关于smbus(系统管理总线,是i2c的子集)的配置过程,了解如如何配置i2c寄存器.所有发送的数据都会写在FIFO中,使能之后就发送出去.接收数据就从接收寄存器中读取.读取和发 ...

  4. JAVA 多线程机制(一)

    PS:又开始忙叨JAVA了..前一阵子搞定了HTML+CSS,要开始写实验室的界面了,真没劲...博客到时候再更新吧! 先更新JAVA的吧... 多线程(一) 主要内容 1.JAVA中的线程 2.用T ...

  5. MindManager篇

    MindManager:新建脑图 MindManager:大纲视图(批阅文档结构) MindManager:导出为其他格式 MindManager:插入基本插入主题.备注,标记等) MindManag ...

  6. MyEclipse安装EGit插件方法

    摘要: 先了解自己的MyEclipse是基于哪个版本的Eclipse优化的,然后到EGit网站找对应的EGit版本,下载压缩包,解压安装. 在网上看到有人说并不是任意版本的EGit插件都能适配你的My ...

  7. 【R】shiny界面

    http://www.rstudio.com/shiny http://yanping.me/shiny-tutorial/#welcome

  8. 深入理解bootstrap框架之第二章整体架构

    标注下,正好最近关注前段框架 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)——这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3 ...

  9. fork函数和vfork函数的区别--19

    fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1.  fork  ():子进程拷贝父进程的数据段,代码段     vfork ( ):子进程与父进程共享数据段 ...

  10. 2014年王道论坛研究生机试练习赛(二)set 2 货币问题

    题目描述: 已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生.求,至少需要几张货币才能完成支付.如,若支付 ...