OOP-20年秋第一周

Java

1. 第一周准备基础+网课助学

2. 实验室扎根学习

3. java–面向对象(封装,继承,多态)–健壮性–跨平台性(jvm)

4. jdk make .class and jvm make it to 0and1 then run in jre.

5. user-0and1-jvm-os-hardware
6. 基础知识
在这里插入图片描述

7.积极阅读文档(中文版)(英语版
8. 其他: B站学习----老师推荐:黑马程序员;本人推荐:浙大翁恺;学长推荐:尚硅谷

桂浩篇 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

  1. 邮箱xxxx@xxx.edu.cn
  2. 学习内容 = Oop javase ide uml
    –①设计模式
    –②io
    –③gui
    –④但是最重要的还是基本概念
  3. 书籍推荐:Java核心技术(第十版+)
  4. 书籍推荐:Java编程思想(第四版+)
  5. Java是general purpose
  6. 机器语言→汇编语言→高级语言
    –但是对于计算机而言 是全倒过来的友好度
  7. 什么是好程序?时间和空间复杂低?
    –速度可以用硬件环境弥补 所以不是最重要
    –可拓展性 可维护性 可读性才是最重要的
  8. Java是在语言上就支持多系统的
  9. 在java中语言是怎么样的?
    –Java是一种高级语言?
    ----✓,可写出.java的源代码,但不局限于,因为还有bytecode,因此之后会提到jvm
    –如何看待java的体系?
    ----待答
  10. Machine language
    –不需要翻译转换 全是0和1 对人’不友好’
    –和机器相关 对计算机来说’友好’
  11. assembly language
    –怕记不住0和1 整点单词来替代
    –用指令要转换 但是依旧无法写程序
  12. High-level language
    –回到第9段最后一问,体系?platform?
    ----比如写一个hello world,build之后把.java变成.class,.class可以认为就是bytecode
    –是不是一个.java对应一个.class?
    ----no,主要是看你定义了几个类
    –.class有什么?
    ----方法+常量池+属性+汇编代码
  13. magic number
    –CAFE BABE是总起
    –为什么要看其他级别的语言?
    ----写给编译器的是源代码
    ----bytecode是写给jvm的
    ----机器语言是写给cpu的
  14. 根据11,java是编译还是解释语言?
    –把英语书变成中文书,保留中文书就是编译
    –每次都翻译一段英语,不保留下来,就是解释语言
    ----而java是混合的!因为.java会被编译为.class,但是.class还要解释
  15. 编译类的速度快,但不能移植!
  16. 解释类虽然可以用在任何地方,但是速度慢
  17. Java就是write once–run everywhere
  18. 看汇编是为了?
    –意味着在编译器你可以寻找更多细节
    –比如写一个无参类person,会被构造吗?
    ----打开.class可以发现在编译的时候
    ----会有一个init(构造函数)
    ----可以发现无参也有this这个参数!
  19. 在隐式类型转换中会发生什么?
    –首先jvm是stack base的cpu(栈式cpu)
    –会把数据放到栈顶,在一个变量得到该数据后,会自动帮你类型转换,这就是隐式类型转换
  20. 类继承父类时重写会发生什么?
    –父类有一个方法返回父类,重写的时候改变了方法的签名,并且返回子类

在这里插入图片描述

----在汇编会出现两个该方法,有一个是你重写的,有一个会依旧返回父类(下面称方法②)
----但是由于你想返回子类,汇编会用方法②去调用你重写的方法
----所以方法②叫合成桥方法,不是你写的,真正被重写的是方法②!!!
----这其实叫做桥方法(synthetic bridge method)
23. 默认的无参构造函数干了什么
–首先把this放到栈顶(aload_0),其次如果是子类会调用父类的构造函数
24. Jvm指令集可以看看
–可以发现iconst_x是一个字节
–而bipush x则是两个字节
–诸如此类,都是一种友好度和复杂度的优化
25. 跨平台?
–因为有bytecode
.java→compile→.class→jvm→nativecode
–但是在jvm to nativecode的时候,是一个interpretation所以会慢一点!!
26. java.exe就是虚拟机
–每一个.exe运行一个程序
27. Java只有reference(引用)放着地址
–引用是一个secure的,jvm中最重要的内存区域是堆,我们new的对象都在堆中
在这里插入图片描述

–加入一句p2=p1,得到了两个引用,栈里面两个都指向堆里
–直接寻址有什么问题?
–heap里如果变了则p2和p1都变,所以用一个间接寻址,加个虚引用
----但是不同的jvm不太一样哦~
28. 常用的jvm是hotspot
–在for循环里,每次都解释for里面的代码,所以把内部先编译,加快速度叫做即时编译
–而这就是hotsopt,即检查代码哪里是热点,但热点判断的次数很高,不过可以参数修改
29. 只要能编译成.class文件
–那么任何源代码都可以运行
30. Jvm有很多component
–最重要的是最开始的 classloader,jvm中用对象的形式 保存一个类定义
–那么保存类定义的对象是什么类型的呢?
----class类型
–很好笑,class可以是类可以是对象,而object可以是一个类
–class类的对象可以说是最重要,而每一个都对应着一个类定义,
–所以对于一个类定义只有一个class类对象
31. Everything is a object
–所以主要看的是类对象,可以考虑getClass()方法,得到这个对象的类对象
32. 类对象的作用?
–时间不够可能讲不完 只讲一点
–在运行的时候person类的方法放在哪?,因为方法都一样 所以放在类对象里,
–method area里面放着类对象
-对30进行补充,无论是成员方法还是静态方法运行时用栈来管理函数调用,类对象就是对class这个类信息的抽象,虽然是个对象,但是代表着类本身,类对象跟这个类的对象不是一个东西-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值