05.Java面向对象
一.面向对象基本概念
面向对象的特征
封装
封装是指利用抽象数据类型将数据(属性)和对数据的操作(方法)包装起来,把对象的属性和动作结合成一个独立的单位,并尽可能隐蔽对象的内部处理细节。
继承
一个类拥有另一个类的所有属性和行为时,就称为继承。被继承类为父类,继承类为子类。
多态
通过子类对父类方法的重写实现多态
同一类中同名方法实现多态(重载方法需定义不同参数列表)
二.类的定义
Java类逻辑结构
在Java语言中,有一个顶层的类Object,它是Java中所有类的父类,在Java中称为基类
访问修饰控制符
类型 | private | 无或者(friendly) | protected | public |
---|---|---|---|---|
同一类 | 是 | 是 | 是 | 是 |
同一包中子类 | 否 | 是 | 是 | 是 |
同一包中非子类 | 否 | 是 | 是 | 是 |
不同包中子类 | 否 | 否 | 是 | 是 |
不同包中非子类 | 否 | 否 | 否 | 是 |
每个源文件只能有一个public类,且类名也是源文件名。
一个源文件可以不含有公有类,此时文件名可以任取。
类的定义
[public][abstract | final] class Name[extends SuperName][implements InterfaceNameList]{
//成员变量的声明
//成员方法的定义
}
abstract//抽象类说明符。抽象类不能直接生成对象
final//终级类说明符。终级类不能被继承
成员变量
[public | private | protected][static][final][transient][volatile] DataType variableName[ = initializationValue]
final//声明一个终极变量(即常量)
static//声明一个静态变量(类变量)
transient//声明一个暂时性变量,提示Java虚拟机忽略保存
volatile//异步保护,维护变量在并发进程的前后一致性
三.方法
方法的定义
[public | private | protected][abstract]|[final][static][native][synchronized] returnDataType | void methodName(parametersList) throws exceptionList{
//方法内变量
//方法内主体代码
}
native//本地化
synchronized//同步
throws exceptionList//定义方法抛出的异常对象的列表
四.对象
对象的定义
className ObjectName = new className(parameter);
匿名对象
new className(parameter)
对象的引用
引用是一个地址,指明了对象的的变量和方法的储存位置。当把一个对象赋值给一个对象变量或者作为方法的参数时,使用的并不是对象本身,也不是它的拷贝,而是它的地址。
Student stu1 = new Student();
Student stu2 = stu1;
//stu2和stu1引用同样的对象,stu2不是stu1的拷贝,stu2并没有分配内存空间
五.实例成员和类成员
实例成员
实例成员是指在访问成员变量和成员方法时,需要通过new创建一个实例对象,然后通过" . "操作符去引用类的成员
实例成员不用static修饰
类成员
类变量
用static修饰的变量
类方法
我们知道,不管是类方法与实例方法,都是以代码块的方式存在,当类的字节码文件加载到内存时,它们在内存中均只有一个备份。但类方法与实例方法不相同的是:
(1)对类的实例方法, 当类加载到内存时,不分配人口地址。当该类创建对象后,类中的实例方法才会被分配人口地址,从而实例方法可以被类创建的任何对象调用执行,这个人口地址也是被所有对象共享的。
(2)对类的类方法,在该类被加载到内存时,就分配了相应的人口地址,当然这个地址在整个类中也是共享的,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。
那么Java应用程序类中的main( )方法为什么必须声明为static呢?这是因为只有类方法,当类加载到内存后就可以获得该方法的人口地址,从而可以由Java虚拟机调用执行,成为整个应用程序的执行人口。如果把main( )方法声明为实例方法,这个main( )方法就无法在类加载到内存时被Java虚拟机直接调用。
初始化器
初始化器是一段不在方法之内的程序代码,这段代码用{ }包围起来。
实例初始化器:无修饰符static,在对象生成时初始化变量(一般不会使用,没有实际意义)
静态初始化器:有修饰符static,在被类加载入内存时只执行一次.
public class Demo {
// constructor 构造函数
public Demo() {
System.out.println("constructor");
}
// static initializer 静态初始化器
static {
System.out.println("static");
}
public static void main(String[] args) {
new Demo();
}
}
//输出
static
constructor
实例代码的初始化在构造方法中完成,类变量的初始化应在静态初始化器中完成,使代码更容易维护和阅读。
六.命令行参数
命令行参数使用格式
//格式一
Java className parameter1 parameter2 parameter3
//格式二(当参数中包含空格时)
Java className "parameter1" "parameter2" "parameter3"
//混合使用(包含空格参数用双引号括起来,没空格不必括起来)
Java className "this is" "a command" "line parameter"
命令行参数的接收
public static void main(String [] args)
05.Java面向对象的更多相关文章
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联——方案二
101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联--方案二 本文知识点:通过方法实现学生类与 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
- 实验二Java面向对象程序设计_20135129李畅宇
ava第二次实验报告 课程:Java实验 班级:201352 姓名:池彬宁 学号:20135212 成绩: 指导教师:娄佳鹏 实验日期:15.05.05 ...
- Java面向对象程序设计
北京电子科技学院(BESTI) 实 ...
- 20155306 实验二 Java面向对象程序设计
20155306 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要 ...
- Java第二次实验报告——Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程名称:java程序设计实验 班级:1352 姓名:洪韶武 学号:20135219 成绩: ...
- JAVA面向对象
JAVA面向对象 对象 我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象 只要是对象--属性和行为(方法) 属性 对象有什么 例如:学生有姓名.学 ...
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
随机推荐
- .NetCore对接各大财务软件凭证API——用友系列(1)
一.前言 今天,我们转战用友系列的第一个产品---T+/Tplus.前两篇文章讲解分享的都是金蝶的产品,因为本身公司牵涉的业务有限,后续有金蝶其他产品的API对接业务时,会继续来分享经验. T+的AP ...
- 使用脚手架 vue-cli 4.0以上版本创建vue项目
1. 什么是 Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI:如果你在开发大型项目, 那么你需要, 并且必然需要使用Vue CLI. 使用Vue.js开发大型应 ...
- 系统对 Device Tree Overlays 的支持方式
问题来源: 野火 iMX 6ULL 开发板资料. https://tutorial.linux.doc.embedfire.com/zh_CN/latest/linux_basis/fire-conf ...
- linux静态网络设置
一:NET模式 第一种: 第二种方式: 三:重启服务
- Jumpserver-跳板机的搭建
Jumpserver堡垒机 一.Jumpserver堡垒机概述-部署Jumpserver运行环境 01 跳板机概述 跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登 ...
- Android中的多进程、多线程
前面几篇总结了进程.线程相关的知识.这里总结下关于Android中的多进程.多线程及其使用. 这里总结的Android中的多进程.多线程也是一个基础,可扩展的很多. Android中多进程 常见的几种 ...
- 一元三次方程组求解 luogu P1024
题目传送门 首先,要明确题目信息,f(x1) * f(x2) < 0, 则一定存在实数根在区间(x1, x2).且所有的根都在[-100, 100)之间.根与根的绝对值之差 >= 1 那么 ...
- 分布式项目开发-web.xml基础配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- 10 个提高效率的 Linux 命令别名
在 Linux 环境下工作的工程师,一定会对那些繁琐的指令和参数命令行印象深刻吧.而且,可怕的不是繁琐,而是需要大量重复输入这些繁琐的命令. 在 Linux 下我们有个别名命令 alias ,可以将那 ...
- 02 . Tomcat多实例并用Nginx反代
Tomcat虚拟主机 一个应用程序在某一个端口启动运行产生了一系列的进程就是一个实例,让tomcat启动两个不同的相互独立的进程,产生两个不同的套接字,分别运行在不同的端口,让不同的端口响应不同的 ...