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 的 堆 和 栈。 参数传递(基本类型和普通对象的区别)的更多相关文章

  1. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  2. java之堆和栈的比较

    当我们第一次接触堆和栈时很多人都不不明白java中为什么要设置这两个概念,他们都有什么作用?堆和栈有什么区别,各自都有什么特点?还有Java中存在栈这样一个后进先出(Last In First Out ...

  3. Java中的基本类型和引用类型变量的区别

    Java中的基本类型和引用类型变量的区别   学了一年多,说实话你要我说这些东西我是真说不出来是啥意思     基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. 引用类型: ...

  4. Java:抽象类abstract和接口Interface

    一.抽象类:abstract 抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情.对于一个父类,如果它的某个方法在父类中实现出来 ...

  5. C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

    由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...

  6. Java虚拟机堆和栈详细解析,以后面试再也不怕问jvm了!

    堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Jav ...

  7. JAVA中用堆和栈的概念来理解equals() "=="和hashcode()

    在学习java基本数据类型和复杂数据类型的时候,特别是equals()"=="和hashcode()部分时,不是很懂,也停留了很长时间,最后终于有点眉目了. 要理解equals() ...

  8. Java中堆与栈

    简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存. 1:什么是堆内存: 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时 ...

  9. java中堆与栈的区别

    堆与栈都是java中常用的存储结构,是内存中存放数据的地方. 堆:主要存放运行时创建(new)的对象.主要用于储存对象,存取速度慢,可以运行时动态分配内存,生命周期不需要提前确定. 栈:主要存放基础类 ...

随机推荐

  1. 数据库之Mysql高级

    简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表sc ...

  2. elk6.22

    启动错误: 参考网站:https://blog.csdn.net/feinifi/article/details/73633235?utm_source=itdadao&utm_medium= ...

  3. 视频地址blog加密

    /* JS部分 没处理兼容什么的 */ var id='<?php echo $_GET['id'];?>'; var video = document.getElementById(&q ...

  4. 字符串(string) 的基本操作

    name = "my \tname is alex"  #\t 空格 1. name.capitalize()  #首字母大写 2.name.count('a') # 对字母a计数 ...

  5. 通过sizeof获得数组长度的方法

    int a[20]; int len = sizeof(a)/sizeof(*a); //值为20,即数组长度为20 注:sizeof是一个操作符,sizeof的值在编译时确定

  6. iOS Hardware Guide

    来自U3D文档 Hardware models The following list summarizes iOS hardware available in devices of various g ...

  7. Spring MVC 接受的请求参数

    目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...

  8. div 自动全屏高度

    最近做一个页面,需要一个div自动铺满全屏,但是高度总是难以搞定.查资料为:需要从html body到div 需要 设置 高度属性 为100%

  9. vim使用方法:

    vim使用方法: 模式: 编辑模式.未编辑模式.命令行模式 i 插入形式进入编辑模式 a 增加 o 下行编辑 O 上行插入 : 进入命令行模式 esc 退出编辑模式 wq 保存文件 yy 复制 p 粘 ...

  10. pip批量更新安装的包

    ------------------pip批量更新库-------------------- 1)查看过期的库 pip list --outdated  更新单一的库: pip install --u ...