java面向对象、构造方法 之内部类
UML类图
UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言
在一个类中
属性表示这类事物的性质(描述它的数据)
方法表示这类事物的功能(用代码实现功能就意味着写流程)
可见性
Java中默认的可见性是包内可见
Private 将可见性限制在本类内部,在类的外部,即使同一个包中也不能访问
Public 将可见性完全放开,所有地方都可以访问
Protected 本包和子类可见
可见性是语言和编译器和JVM级别的,这些信息保存在类的元数据中
类的元数据:
类的全名
类中的成员名
如果方法则包含参数/返回值等详细信息
方法代码的位置(内存地址)
程序启动(此时还没有调用main方法)
Java/javaw一开始运行的时候(此时还没有调用main方法)
加载类(.class,字节码)并保存在代码区
把类中的静态成员/数据初始化到静态区
找到main方法并调用
在栈(Stack)中产生main方法的栈帧
Circle c = New Circle()
会在堆(heap)区为c对象分配一块内存空间
调用Circle的构造函数(没有定义的话会自动生成一个)
构造函数会初始化实例属性(没有指定值的话就初始化为0)
对象初始化完毕后,栈帧中会有一个局部变量c指向这个对象
实例属性和静态属性的理解与区别
实例属性:
1.每个对象都有自己单独的一份实例属性,实例属性的数据保存在堆区。
2.随着对象的创建而产生,可以随时创建对象。
3.会随垃圾回收清理掉,从而释放它占据的内存空间
静态属性:
1.一个类只有一份静态属性,无论创建多少个对象,静态数据只有一份。静态数据存放在静态区。
2.类通常在启动时加载,在类加载时被初始化,通过反射才能在运行过程中加载新类。
3.一旦加载就一直存在。
实例方法和静态方法的理解与区别
实例方法
1.在实例方法中访问实例属性,相当于this.属性名,在本类中this可省略
2.在实例方法中默认的上下文环境是this,也就是当前对象
3.在实例方法中可以访问静态属性,相当于 类名.属性名,在本类中类名可省略
静态方法
1.在静态方法中可以访问静态属性,相当于 类名.属性名,在本类中类名可省略
2.在静态方法中不能使用this,也就是不能this.属性名,访问实例属性
static void Count() {
PI = 3;
//this.radius =5;
}
构造方法 Constructor
1.构造方法与类名相同,没有返回值,连void都没有
2.具有可见性
3 .不写时,编译器默认生成一个无参构造方法
4.将所有实例属性初始化为0
5.如果程序编写了一个构造方法,而不再自动生成构造方法
6.无参构造方法
1>无参构造方法可以方便地创建对象
无论是人工创建还是通过反射创建都很方便
2>无参构造方法创建的对象,属性值要么是0,要么是n
通常在使用之前还需要再次给属性赋一个有用的值
在java中有一个概念---bean
bean类要求有一个无参构造方法
可以使用工具自动创建对象
1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2.每个类可以有一个以上的构造器
3.构造器可以有0个、1个或1个以上的参数
4.构造器没有返回值
5.构造器总是伴随着new操作一起调用
Getter/Setter访问器方法
目的是不让属性直接暴露出来,而是通过方法(getter/setter)间接地访问属性
好处是:
可以控制只读、只写
还可以在赋值时进行转换、验证等操作
可以在获取值时进行转换或修改
继承
没有指定父类,默认都从Object类继承
使用extends关键字可以指定父类
如果要覆盖或重写父类的方法,最好标记@Override注解(Annotation)
注解是可以附加到类元数据上的对象
反射是获取类元数据信息的编程接口
抽象类
用abstract标记
不需要实例化,只为继承而存在
抽象方法
不为调用,只为继承
用abstract标记,没有方法体!
抽象类中既可以有抽象方法也可以有非抽象方法!
在继承体系中子类可以通过super关键字访问父类
调用父类构造方法
Super()
调用本类构造方法
This()
访问父类的属性
Super.属性名
调用父类的方法
Super.方法名()
如果父类有无参构造方法,子类可以不显式调用super(),如果没有无参构造方法,必须手动显式调用super(xxx),否则报编译错误。
当父类同时存在无参和有参构造方法时,默认调用无参构造方法。
当未写任何构造方法时,编译期自动帮你添加一个无参构造方法,其他同上。
编译器是会自动在子类的构造行数中,
在首行添加"super();", 这么一个语句,用来初始化父类的数据;
如果没有的话, 编译的时候,无法找到父类的无参构造函数,就无法绑定运行时候调用哪个父类的构造函数,编译的时候就会报错啦;
所以记得在以前学习的时候,
很多书籍都是让重载构造函数的时候, 记得添加一个无参的构造函数
作业
1.
Triangle 三角形
Parallelogram 平行四边形
Sector 扇形
2.
实现oo版的单位转换
java面向对象、构造方法 之内部类的更多相关文章
- Java面向对象-构造方法,this关键字
Java面向对象-构造方法,this关键字 构造方法 概念:构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作: 上代码: package com.java1234.chap03.se ...
- Java核心技术点之内部类
1. 为什么要使用内部类 内部类就是定义在一个类内部的类,那么为什么要使用内部类呢?主要原因有以下几点:第一,内部类中定义的方法能访问到它所在外部类的私有属性及方法:第二,外部类无法实现对同一 ...
- Java类成员之内部类
内部类含义: 在Java中允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类. Inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称. Inner ...
- Java—面向对象—构造方法及相关思维导图
先构造一个Book类的代码 package org.hanqi.pn0120; public class Book { //构造方法 //1.方法名和类名一样 //2.没有返回值,不需要加void / ...
- JAVA面向对象-----构造方法
我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的.那么我们在java里面怎么在对象一旦创建就赋值呢? 构造方法作用 构造方法作用:对对象进行初始化. 构造函数与普通的函 ...
- Java语法糖之内部类
例1: class Outer { public void md1(final int a) { final int b = 1; class LocalA { int c = a; } class ...
- JAVA基础之内部类
JAVA基础之内部类 2017-01-13 1.java中的内部类都有什么?! 成员内部类 局部内部类 匿名内部类 静态内部类 2.内部类详解 •成员内部类 在一个类的内部再创建一个类,成为内部类 1 ...
- java之内部类
最近学了java,对内部类有一点拙见,现在分享一下 所谓内部类(nested classes),即:面向对象程序设计中,可以在一个类的内部定义另一个类. 内部类不是很好理解,但说白了其实也就是一个类中 ...
- 【Java基础】【07面向对象-构造方法&静态static】
07.01_面向对象(构造方法Constructor概述和格式)(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名一致) b: ...
随机推荐
- Spring Cloud概述
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...
- Ubuntu 16.04下搭建kubernetes集群环境
简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...
- /^(0|[1-9]\d*)([.]5)?$/ 在PHP正则中是什么意思 ?
^以什么开头 ()分组 |或的意思 \d 匹配任何数字字符串 [-] |[-]\d* 或1-9之间的数+任意数字零次或多次 开头 ()分组 []原子表 [.]5匹配. ? 零次或1次 总结: 必须以0 ...
- 信号处理函数(3)-sigaction() 为信号注册信号捕捉函数
定义: int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact); 表头文件: #include& ...
- nodejs之util工具
util是nodejs的一大核心模块,用来提供常用函数的集合 1.util.inherits(实现对象原型继承) 概要:js的继承是基于原型的,本身并没有继承的语言特性,仅仅是通过复制原型的方式来实现 ...
- Android中<uses-sdk>属性和target属性分析
1. 概要 <uses-sdk> 用来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的平台版本.通过在manifest清单文件中添加该属性,我们可以更好的控制 ...
- [systemd]Linux系统启动之systemd
参照:https://wiki.debian.org/systemd 最近在添加板子应用程序自启动的时候,发现在rcN.d中的符号链接并没有用,文件系统为Debian Jessie 8, 后来从同事那 ...
- am335x usb host patch设计
USB直接作为host时省掉一个5V的DCDC,直接连接到5V的输入上面.对于Linux SDK,需要一个patch去确保这个设计能够正常工作,patch内容请参考: static struct om ...
- 关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用
在群里最近有人提到如何处理在页面跳转之后,想要直接定位到相对应的选项卡的选项上,比如首页有登录和注册两个按钮,而登录注册页面有一对选项卡分别对应的是登陆和注册,想要实现的功能是点击登陆去到登录页的登录 ...
- 织梦dede模板中广告的去除方法?
织梦)dede模板中广告的去除方法1.我们先删除头部的广告,找到templetsdefault下的head.htm文件,打开后找到<div>{dede:myad name=’innerTo ...