抽象 abstract 和 接口 interface。 java 的 堆 和 栈。 参数传递(基本类型和普通对象的区别)
package com.test; import com.test.Pro;
//protected 修饰的成员只能在本包中和 继承该类的方法中使用
public abstract class Testpro {
public void aa(){
Pro p=new Pro();
p.getProtex();
} //抽象方法不需要 方法体,但是 如果一个类中有abstract方法是,该类也必须是抽象的。
//抽象类中 可以有非抽象方法
//抽象类可以被继承,但是必须重写抽象类中的抽象方法,否则该类仍然是抽象类。
// 抽象类中可以 有成员变量,接口中也可以有成员变量,但是必须给与初值, //接口与抽象类: 如果许多类实现了一个接口,但是 这些类 又有一些重复的部分,这时可以考虑将这些重复放到抽象类中,
//其他仍然作为 抽象方法,如本例中的 happFood() (重复部分),eat()(其他部分) 。抽象类是为了简化接口的实现
private String aa; public abstract void eat(); public void haapyFood(){
System.out.println("happy food");
}
}
java 堆和栈
Pro p=new Pro(); // pro 普通java 类 1.new 是在内存中为对象开辟空间,即在内存的堆(heap)上为对象开辟空间。
p 是 一个Pro 对象,是对象引用 ,p 并不是对象本身,而是相当于一个指针,指向该对象。而p 存在与
内存的栈(stack) 上
2.栈的读取速度比堆 快,但是 栈上存储的数据 受到有效范围的限制 , 方法调用等 完成后 相应的栈数据就会被清空。
3.java中所用的普通对象都储存在 堆 中 ,但是基本类型(primitive type)的对象,比如int, double,保存在栈上,我们声明基本类型时,不需要new。一旦声明,Java将在栈上直接存储基本类型的数据。所以,基本类型的变量名表示的是数据本身,不是引用。 所以在方法调用结束后,栈中引用 和 基本类型 会被清空, 但是堆中的对象仍然存在,所以对象所占据的内存不会随着方法调用的结束而清空。进程空间可能很快被不断创建的对象占满,,Java内建有垃圾回收(garbage collection)机制,用于清空不再使用的对象,以回收内存空间。
4.垃圾回收的基本原则:当存在引用指向某个对象的时候 ,该对象不会被回收。当没有引用指向该对象时,该对象被清空,空间被回收。。
方法的 参数传递:
java的参数传递为 值传递, 即当我们传递一个参数时,方法将获得该参数的一个拷贝。
实际上,我们传递的参数,一个是基本类型的变量,另一个为对象的引用。
基本类型变量的值传递 ,意味着变量本身被复制, 并传递给java 方法,java方法对变量的修改不会影响到原变量。
引用的值传递,意味着对象的地址被复制,那么java方法对该应用的访问将会影响对象,但是 不会 影响原有的那个栈引用。这些栈会在方法结束时清空。
抽象 abstract 和 接口 interface。 java 的 堆 和 栈。 参数传递(基本类型和普通对象的区别)的更多相关文章
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- java之堆和栈的比较
当我们第一次接触堆和栈时很多人都不不明白java中为什么要设置这两个概念,他们都有什么作用?堆和栈有什么区别,各自都有什么特点?还有Java中存在栈这样一个后进先出(Last In First Out ...
- Java中的基本类型和引用类型变量的区别
Java中的基本类型和引用类型变量的区别 学了一年多,说实话你要我说这些东西我是真说不出来是啥意思 基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. 引用类型: ...
- Java:抽象类abstract和接口Interface
一.抽象类:abstract 抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情.对于一个父类,如果它的某个方法在父类中实现出来 ...
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...
- Java虚拟机堆和栈详细解析,以后面试再也不怕问jvm了!
堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Jav ...
- JAVA中用堆和栈的概念来理解equals() "=="和hashcode()
在学习java基本数据类型和复杂数据类型的时候,特别是equals()"=="和hashcode()部分时,不是很懂,也停留了很长时间,最后终于有点眉目了. 要理解equals() ...
- Java中堆与栈
简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存. 1:什么是堆内存: 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时 ...
- java中堆与栈的区别
堆与栈都是java中常用的存储结构,是内存中存放数据的地方. 堆:主要存放运行时创建(new)的对象.主要用于储存对象,存取速度慢,可以运行时动态分配内存,生命周期不需要提前确定. 栈:主要存放基础类 ...
随机推荐
- 数据库之Mysql高级
简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表sc ...
- elk6.22
启动错误: 参考网站:https://blog.csdn.net/feinifi/article/details/73633235?utm_source=itdadao&utm_medium= ...
- 视频地址blog加密
/* JS部分 没处理兼容什么的 */ var id='<?php echo $_GET['id'];?>'; var video = document.getElementById(&q ...
- 字符串(string) 的基本操作
name = "my \tname is alex" #\t 空格 1. name.capitalize() #首字母大写 2.name.count('a') # 对字母a计数 ...
- 通过sizeof获得数组长度的方法
int a[20]; int len = sizeof(a)/sizeof(*a); //值为20,即数组长度为20 注:sizeof是一个操作符,sizeof的值在编译时确定
- iOS Hardware Guide
来自U3D文档 Hardware models The following list summarizes iOS hardware available in devices of various g ...
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- div 自动全屏高度
最近做一个页面,需要一个div自动铺满全屏,但是高度总是难以搞定.查资料为:需要从html body到div 需要 设置 高度属性 为100%
- vim使用方法:
vim使用方法: 模式: 编辑模式.未编辑模式.命令行模式 i 插入形式进入编辑模式 a 增加 o 下行编辑 O 上行插入 : 进入命令行模式 esc 退出编辑模式 wq 保存文件 yy 复制 p 粘 ...
- pip批量更新安装的包
------------------pip批量更新库-------------------- 1)查看过期的库 pip list --outdated 更新单一的库: pip install --u ...