Bigdata Development Java_Study_04(interface 堆,栈)
来源:互联网 发布:农村淘宝一单赚多少钱 编辑:程序博客网 时间:2024/06/10 14:48
接口
/*接口也是一种数据类型。父类可以表示一系列继承自父类的子类的类型。接口和父类一样,也可以使用接口表示一系列实现了接口的类的类型。继承通常表示is - a的关系,xxx是yyy的一种。苹果是水果的一种。接口通常表示hava - a的关系,xxx有(会)yyy。鼠标有Usb接口可以链接电脑。interface 接口。只能定义一种类型的属性和方法。属性:只能定义public static final的常量。方法:只能定义public abstract类型的方法。只能定义常量,大部分情况下都是只有抽象方法,常量并不常用。通常省略public abstract ,系统会自动帮我们补全。implements 实现接口的关键字。接口和抽象类一样。如果实现了接口,必须实现接口中所有的抽象方法。除非设置为抽象类。*/public interface Usb { /** * usb 设备的名字 * @return */ String usbDeviceName();}public class UDisk implements Usb { @Override public String usbDeviceName() { return "U 盘"; }}public class Mouse { public String usbDeviceName() { return "鼠标"; }}public class Computer { /** * 只有遵守规范,什么都可以链接 * @param usb */ public void connectUsb(Usb usb) { String name = usb.usbDeviceName(); System.out.println(name + "...连接上电脑了"); }}public class Demo { public static void main(String[] args) { int s [] = new int [10]; Computer computer = new Computer(); UDisk uDisk = new UDisk(); Mouse mouse = new Mouse(); computer.connectUsb(uDisk); // computer.connectUsb(mouse); // 接口不能创建对象,只能使用实现了接口的类创建对象 // 除非使用匿名类,创建一个实现了接口的没有名字的类的对象 Usb usb = new Usb() { @Override public String usbDeviceName() { // TODO Auto-generated method stub return null; } }; // Usb 是 u2 的编译时类型 // UDisk 是 u2 的运行时类型 Usb u2 = new UDisk(); }}
Java中堆与栈
public class Pet { public String name;}public class People { public static String COUNTRY = "中国"; public String name = "张三"; public int age = 20; public Pet pet; public People() { this.name = "李四"; this.age = 30; }}public class Demo { public static void main(String[] args) { People p1 = new People(); // 1. 把 People.class 加载到方法区 // 2. 在栈上开辟空间存储 p1 // 3. 在堆开辟空间存储 People 对象 // 4. 给属性 name 和 age 赋予默认值,null 和 0 // 5. 给属性 name 和 age 赋予值,张三,20 // 6. 调用构造方法,给属性 name 和 age 赋予值,李四,30 // 7. 把堆上地址赋值给栈上的 p1 p1.age = 50; // 1. 根据 p1 保存的地址,找到堆上的对象存储空间 // 2. 找到 age 对应的存储空间 // 3. 修改 age 的值为 50 int age = 30; // 1. 栈上开辟空间存储 age // 2. 把 30 存在 age 位置 People p2 = new People(); // new 开辟内存,创建新对象 // 2-7 的流程走一遍 p2.age = 80; People p3 = p1; // 1. 栈上开辟空间存储 p3 // 2. 把 p1 保存的地址赋予 p3 // p1 和 p3 就指向堆上的同一块内存地址 p3.name = "蜘蛛侠"; System.out.println(p1.name); p3.COUNTRY = "美国"; System.out.println(p2.COUNTRY); Pet pet = new Pet(); // 1-7 的流程,创建对象得到堆上的地址 0x010 赋给 pet // 只有 new 的时候才会创建新的对象,赋值是传递地址 p1.pet = pet; // 把 0x010 存到 p1.pet 中 p1.pet.name = "旺财";// 修改的是 0x010 中的 name System.out.println(pet.name);// 输出的也是 0x010 中的名字 method1(age); // 基本类型传递的是值,方法内部改变不了 age 的值 System.out.println(age); method2(p1); // 引用类型传递的是地址,方法内部可以改变对象的属性的值 System.out.println(p1.age); method3(p1); System.out.println(p1.age); // 栈:空间小,读写速度快 // 堆:空间大,读写速度相对较慢 // 基本类型分配在 栈 上,保存的是数据的值 // 引用类型分配在 堆 上,会在栈上保存一个地址的引用,称为指针 // final 类型定义的变量值不能修改 final int a = 10; // a = 100; final People p7 = new People(); p7.age = 100;// 为什么可以? // p7 = p1; // p7 = new People(); } public static void method1(int age) { // age = 50; } public static void method2(People p1) { p1.age = 50; } public static void method3(People p1) { // People p1 = p1; // 创建新变量 p1,值为方法调用的时候传入的 p1 的值 0x001 p1 = new People(); // p1 = 0x009,产生新对象,不在影响原来的对象 p1.age = 70; // 修改 0x009 的值 }}
阅读全文
0 0
- Bigdata Development Java_Study_04(interface 堆,栈)
- Bigdata Development Java_Study_09(文件,io流)
- Bigdata Development Java_Guidance_01
- Bigdata Development Java_Guidance_02
- Bigdata Development Java_Study_08(Exception)
- Bigdata Development Web_Study_01(HTML)
- Bigdata Development Database_Study_01
- Bigdata Development Java_Study_01(二进制计算符号,Math常用方法)
- Bigdata Development Java_Study_06(集合Collection和Map)
- Bigdata Development Database_Study_02(多表查询,外键,事务)
- Bigdata Development Web_Study_05(JSP中九大内置对象)
- Bigdata Development Web_Study_03(input标签,请求转发和重定向)
- Bigdata Development Web_Study_02(Servlet使用,table标签)
- Bigdata Development Web_Study_04(Session和Cookie)
- Agile User Interface Development
- C# Interface Based Development
- Bigdata Development Java_Study_02 (继承 基本定义以及构造方法)
- Bigdata Development Java_Study_03(继承中关键字,抽象类)
- vue-lazyload基础实例(基于vue2.0和vue-router2.0)
- 数字电路中的亚稳态产生原因和处理方法
- 修饰符
- Python-14 函数:灵活即强大
- IO之流输入输出FileInputStream和FileOutputStream
- Bigdata Development Java_Study_04(interface 堆,栈)
- JavaScript常见问题整理
- 多进程的Python实现
- Android使用已有的sqlite数据库的方法
- awk用法简介
- 欢迎使用CSDN-markdown编辑器
- hdu 2034 人见人爱A-B
- express模拟mock数据
- C语言学习:信号屏蔽字sigset_t,sigprocmask,sigpending