java面向对象(上)
一.一些重要的概念理解
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面向对象(上)的更多相关文章
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- Java面向对象 集合(上)
Java面向对象 集合(上) 知识概要: (1)体系概述 (2)共性方法 (3)迭代器 (4)list集合 (5)Set 集合 体系概述: 集 ...
- java第三节 面向对象(上)
//第三讲 //面向对象(上) /* 理解面向对象的概念 面向过程 在一个结构体中定义窗体的大小,位置,颜色,背景等属性,对窗口操作的函数窗口本身的定义没有任何关系 如HideWindow, Move ...
- 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封装 ...
- 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现
111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- 【Java基础】面向对象上
面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...
- java面向对象编程(上)
java面向对象学习的三条主线 1.Java类及类的成员:属性.方法.构造器.代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.stat ...
- Java面向对象 继承(上)
Java面向对象 继承 知识概要: (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
随机推荐
- QSignalMapper类处理多信号关联同一个槽的方法(2)
例1: QSignMapper *mapper = new QSignMapper(this) QPushButton *btn1 = new QPushButton(this); btn1-> ...
- 关于Struts2的jsp页面的注释
语句就算用<!-- -->注释后,还是会在编译的时候显示在网页上,而且网页还会报错,因为注释的那些语句也会去编译,也会去检查有没有错误,所以一些注释掉的过时的变量和方法也会导致报错.500
- bcm56150_i2c驱动分析
本文主要关注bsp中,关于smbus(系统管理总线,是i2c的子集)的配置过程,了解如如何配置i2c寄存器.所有发送的数据都会写在FIFO中,使能之后就发送出去.接收数据就从接收寄存器中读取.读取和发 ...
- JAVA 多线程机制(一)
PS:又开始忙叨JAVA了..前一阵子搞定了HTML+CSS,要开始写实验室的界面了,真没劲...博客到时候再更新吧! 先更新JAVA的吧... 多线程(一) 主要内容 1.JAVA中的线程 2.用T ...
- MindManager篇
MindManager:新建脑图 MindManager:大纲视图(批阅文档结构) MindManager:导出为其他格式 MindManager:插入基本插入主题.备注,标记等) MindManag ...
- MyEclipse安装EGit插件方法
摘要: 先了解自己的MyEclipse是基于哪个版本的Eclipse优化的,然后到EGit网站找对应的EGit版本,下载压缩包,解压安装. 在网上看到有人说并不是任意版本的EGit插件都能适配你的My ...
- 【R】shiny界面
http://www.rstudio.com/shiny http://yanping.me/shiny-tutorial/#welcome
- 深入理解bootstrap框架之第二章整体架构
标注下,正好最近关注前段框架 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)——这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3 ...
- fork函数和vfork函数的区别--19
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 ...
- 2014年王道论坛研究生机试练习赛(二)set 2 货币问题
题目描述: 已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生.求,至少需要几张货币才能完成支付.如,若支付 ...