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. 了解设计 ...
随机推荐
- 关于Cocos2d-x的动作和动画
1.动作,在cocos2d-x中有非常多种的动作,各种移动,旋转,缩放,淡入淡出....等等非常多,但是这些动作只是作用于节点,最常作用于的就是精灵节点.而且我们可以把很多个动作放进一个Sequenc ...
- jenkins配置过程遇到的问题
jenkins 搭建完成后,可以浏览器访问: http://localhost:8081/jenkins, 新建任务过程中遇到以下问题: 1. 源码管理不现实git, 只显示无 解决: 插件管理 - ...
- php -- php控制linux关机、重启、注销
php 里面有个 system(exec) 方法, 可以调用系统命令. 重启先建立一个脚本(比喻 /root/reboot_server.sh ),重启用的.//路径可随便,但最少必须 ...
- linux配置java环境
第一步: vim /etc/profile 第二步:添加以下4行 第三步:使配置生效 source /etc/profile 结束配置
- 学习 TList 类的实现[8]
现在准备建立 Items 数组属性; 在 public 区输入下面代码:property Items[Index: Integer]: Pointer; 执行 Shift+Ctrl+C 后的代码是: ...
- 手机web不同屏幕字体大小高度自适应
body{font-size:0.6rem:} <script> //使用rem策略,不断更新html的fontsize (function(){ function sizeHtm ...
- js判断用户关闭页面或浏览器
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- mysql数据库中,通过一条insert into语句,同时插入多个值
需求描述: 今天在看一本mysql的书籍,发现一个mysql中insert into好用的技巧,就是通过 1条insert into语句,插入多行数据,而不是多个insert into语句.在此记录下 ...
- web.xml 中的listener、filter、servlet 加载顺序及其【配置详解】
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- GIS-006-ArcGIS API 空间关系
Name Description 解释 SPATIAL_REL_CONTAINS Part or all of a feature from feature class 1 is contained ...