Java类与对象
程序员文章站
2024-03-16 10:05:58
...
Java类与对象
对象内存分析
- 栈
- 堆
方法区时所有方法
该哪个运行的时候哪个就进栈
进栈后在堆中躁
对象调用的内存显示
方法中的成员变量是参考原成员再在堆中创建,而方法则是保存原方法的地址,指向原地址
两个对象调用一个方法的内存
每个NEW 方法都在堆里创建一个新的地址区域重新运行走过程
两个引用指向同一个对象
使用对象类型作为方法参数
使用对象类型作为方法的返回值
类与对象
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
-
类是一个模板,对象是一个具体的实例
-
对象的引用
-
引用类型:基本类型之外的所有都是引用类型
都是通过对象引用来操作:栈---->堆 指向的是地址
-
-
属性:字段Field 成员变量
- 默认初始化
- 数字 :0
- char:u0000
- boolean:false
- 引用:null
- 修饰符 属性类型 属性名=属性值
- 默认初始化
-
方法:
-
对象的创建和使用
- 必须使用new关键字创建对象,还得有构造器 Persion hou=new Persion();
- 对象的属性 hou.name;
- 对象的方法 hou.sleep();
-
类
- 静态的属性 属性
- 动态的方法 方法
Static关键字
public class Persion {
//其次运行 一般用来赋值
{
System.out.println("匿名代码块");
}
//首先运行并且只执行一次
static {
System.out.println("静态方法");
}
//再运行
public Persion(){
System.out.println("构造");
}
public static void main(String[] args) {
Persion persion = new Persion();
Persion persion1 = new Persion();
}
}
接口 interface implements 多继承
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)
接口:只有规范 !自己无法写方法!约束和实现分离:面向接口编程
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是。。。。。则必须能。。。。”的思想,如果你是骑车,则必须能跑
接口的本质就是契约,就像我们人类的法律一样,制定好大家都遵守
oo的精髓,是对对象的抽象,最能体现这一点的就是接口,为什么我们讨论设计模式都只针对具备了抽象能力的语言(c++,java,c#),就是因为设计模式研究的,实际就是如何合理的就抽象
作用
- 约束
- 定义一些方法,让不同的人实现
- public abstract 默认的方法
- public static final 常量
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法
内部类
内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对于A类就被称为内部类,而A类相对于B类来说就是外部类了
-
成员内部类
-
public class demo { private String name="剑来"; public void out(){ System.out.println("这是外部类方法"); } class inner{ public void inner(){ System.out.println("这是内部类的方法"); } //获得外部类的私有属性和方法 public void getname(){ System.out.println(name); out(); } } }
demo demo = new demo(); demo.out(); //通过外部类得到内部类 api.demo.inner inner = demo.new inner(); inner.inner(); inner.getname();
-
-
静态内部类
-
static class inner { public void inner() { System.out.println("这是内部类的方法"); } }
public static void main(String[] args) { demo demo = new demo(); api.demo.inner inner = new demo.inner(); inner.inner(); }
-
-
局部内部类
-
public class demo { //局部内部类 public void method(){ class Inner{ public void ok(){ System.out.println("666"); } } } }
-
-
匿名内部类
-
public class demo { public static void main(String[] args) { //没有名字初始化类,不用讲实例保存到变量中 new A().ok(); B b = new B() { @Override public void th() { System.out.println("实现方式"); } }; //上边重写实现了所以这边可以有结果 b.th(); } } class A{ public void ok(){ System.out.println("666"); } } interface B{ void th(); }
b.th(); }
}
class A{
public void ok(){
System.out.println(“666”);
}
}
interface B{
void th();
}
-