目录

  • 一、一维数组
    • 1. 变量名指向地址
    • 2. 数组新建和输入
    • 3. 数组可以先声明后分配
    • 4. 静态初始化
    • 5. 数组使用的一些注意细节
    • 6. 值传递和引用传递的区别
    • 7. 数组拷贝
    • 8. 数组的扩容
  • 二、 二维数组
    • 1. 动态初始化
    • 2. 内存存在形式
    • 3. java数组可以列数不确定,列数可以不一样
    • 4. 静态初始化
    • 5. 二维数组的注意细节
    • 6. 对数组声明和初始化的理解练习
  • 三、面对对象基础篇
    • 1. 内存中对象的存在形式
    • 2. 成员变量的注意细节
      • ps:基本数据类型和引用类型
    • 3. 创建对象的方法
    • 4. 类和对象的内存分配机制
    • 5. java内存结构分析
    • 6. 成员方法的调用机制
      • ps:java在什么情况下发生自动类型转换
    • 7. 成员方法传参机制(基本数据类型)
    • 8. 成员方法传参机制(引用数据类型)
    • 9. 怎么判断对象是不是同一个
  • 四、递归
    • 1. 简单的递归分析
    • 2. 递归重要规则
    • 3. 汉诺塔代码
  • 五、一些知识点
    • 1. 方法重载
    • 2. 可变参数
    • 3. 作用域
    • 4. 构造方法/构造器
    • 5. 对象创建的流程分析
    • 6. this关键字
      • 1) 引入
      • 2) this关键字的jvm内存理解(this本质)
      • 3) 小结
    • 7. 包
    • 8. 访问修饰符
  • 六、 封装
  • 七、 继承
    • 1. 关系图
    • 2. 注意细节
    • 3. 继承内存布局
    • 4. 练习
    • 5. super关键字
    • 6. 方法重写/覆盖
  • 八、多态
    • 1. 介绍
    • 2. 注意细节
      • 1)向上转型
      • 2)向下转型
      • 3)属性的值
      • 4)instanceOf
    • 3. 一些练习
    • 4. java的动态绑定机制
      • 1) 问题引入
      • 2) 定义
    • 5. 多态数组
    • 6. 多态参数
  • 九、Object类详解
    • 1. equals()
      • 1)equals和==的区别
      • 2)如何重写equals
    • 2. hashcode()
    • 3. toString()
    • 4. finalize
    • 5. 断点调试

一、一维数组

1. 变量名指向地址

2. 数组新建和输入

3. 数组可以先声明后分配


这种情况的话实际上是先new了一个指针a,a此时指向null,后面再将a指向new int[3]分配的空间

4. 静态初始化

5. 数组使用的一些注意细节

6. 值传递和引用传递的区别


其实不管是基本数据类型还是引用类型,拷贝的时候都是从栈中直接赋值变量名指向的东西过去,区别就在于n1指向的是数而arr1指向的是地址

7. 数组拷贝

8. 数组的扩容


二、 二维数组

1. 动态初始化

2. 内存存在形式


3. java数组可以列数不确定,列数可以不一样


遍历的时候才真正开空间

4. 静态初始化

5. 二维数组的注意细节

6. 对数组声明和初始化的理解练习

三、面对对象基础篇

1. 内存中对象的存在形式

2. 成员变量的注意细节

ps:基本数据类型和引用类型


基本数据类型就这几种,其他的都是引用类型

注意 p1只是 对象名,new出来的空间才是真正的对象
就比如小明和李明都是这个人的名字而已,并不是他自己

3. 创建对象的方法

先声明对象cat,此时cat指向null,等new cat的时候,在堆中创建空间,然后将该空间的地址比如OX1122赋值给cat,cat就指向了OX1122的这个空间,即指向了这个对象。

4. 类和对象的内存分配机制


执行第一行代码

执行第二行代码

执行第三行代码
(必须注意,有数据就一定有地址空间,将“小明”这个字符串的地址回填)

执行第四行代码(要是前面对老师说的内存分配机制理解够好的话,这里自己也能推出来)

5. java内存结构分析


练习:分析以下代码会出现怎样的结果
(b指向null,可是a并没有,a仍然指向该对象,只要该对象还有指向它的,就不会被回收)

6. 成员方法的调用机制

只要调用一个方法就会产生一个新的栈

返回之后这个栈(名字不是真的叫gersum栈,只是为了理解方便)就会被销毁,就是这个空间被释放了/回收了/没有了。将得到的值(res)返回赋值给调用它的地方。

当main方法也结束了之后,main栈空间也被回收

ps:java在什么情况下发生自动类型转换

7. 成员方法传参机制(基本数据类型)

这两个栈是独立的,而且传递的参数是基本数据类型,在swap中形参的改变不影响实参。

8. 成员方法传参机制(引用数据类型)



9. 怎么判断对象是不是同一个

  1. 可以通过输出对象的hashcode看看对象是否是同一个
  2. 通过对象比较 if(p1==p2)

四、递归

1. 简单的递归分析

2. 递归重要规则

3. 汉诺塔代码

五、一些知识点

1. 方法重载


返回类型相同与否都没关系,关键是f选项中的参数列表是一样的。所以不能构成方法重载,这样是方法重新定义了,会报错。

2. 可变参数




注意细节

可以直接传数组进去

3. 作用域




结合jvm内存机制理解,say方法用的时候会在栈中创建,用完之后就销毁该方法占用的空间了,其内的变量也就自然而然没了。

4. 构造方法/构造器


注意这里,构造器不是创建一个对象,而是在创建了一个对象之后,对对象的属性进行初始化,比如填值。


每次的new XX()其实都会调用默认无参构造器

反编译发现确实会有这样的构造器

如果没有显式定义无参构造器,只有有参的构造器,当你new Dog()的时候立刻报错,因为原先的无参构造器已经被覆盖掉了,要是你还想用,就需要定义出来。

5. 对象创建的流程分析

在这里实际上属性被三次初始化了,第一次是建造对象时,默认初始化age=0,name=null;第二次是成员变量显式定义初始化,age=90,name=null;第三次是使用构造器,name=“小倩”,age=20。

这里还要再次强调,p是对象的引用,也可以说是对象名,但它不是对象,真正的对象在堆里面。

6. this关键字

1) 引入

这样的话实际上属性并没有被赋值,所以需要this

2) this关键字的jvm内存理解(this本质)

3) 小结

关于第四点

7. 包


8. 访问修饰符

六、 封装


七、 继承

1. 关系图

2. 注意细节


在子类初始化的时候默认调用super(),只不过是隐式的,没让我们看见而已



3. 继承内存布局


那当我想访问name的时候,访问到的是哪个呢?
答:从后往前找,有这个属性并且可以访问的话就返回。
如果遇到一个属性能找到,但是它是私有的,直接报错,不再往上找。

4. 练习

在这里,B类无参构造器因为有this所以没有super,但是它的有参构造器是有super的。

5. super关键字




属性和方法的规则一样

6. 方法重写/覆盖



八、多态

1. 介绍



2. 注意细节

1)向上转型



重点:属性(成员变量)看编译类型,成员方法看运行类型!!!!!!!!!!

2)向下转型



注意 这里父类引用必须指向的是当前目标类型的对象,即Animal animal=new Cat(),animal本来在内存中就是指向一个Cat对象的!

3)属性的值


4)instanceOf

3. 一些练习


第五个容易错哦,注意规则是:
属性看编译类型(等号左边),方法看运行类型(等号右边)。

4. java的动态绑定机制

1) 问题引入

如果这样的话,大家都能理解答案是为什么。

但是如果我现在去掉子类的sum方法,它自然就会想要往父类去找sum方法,而父类的sum方法里面要调用getI()方法,那么父类调用getI方法是父类的还是子类的呢?

2) 定义


由于规则1,上面引入问题的答案就应该是,它会去调用子类的getI方法!!结果a.sum()=30。

那如果这次又去掉子类的sum1方法呢?

由于规则2,现在调用到的sum1是父类的方法,而属性又没有动态绑定机制,所以i是父类的i,答案就是20。

那现在如果又没有了子类的i,a.sum()会返回什么?

根据上面的分析,调用a.sum的时候它会去调用父类的sum方法,父类又由于动态绑定机制规则1会去调用子类的getI方法,而子类的getI方法想要调用属性i,但是现在子类B中并没有i这个成员变量,它就又往上去查找,找到父类的i,所以答案是20。

5. 多态数组


具体可以看自己的代码
(D:\Project\JavaBasic\src\main\java\com\XXX\polymorphicArray)
如果想要调用每个类的特有方法

6. 多态参数


九、Object类详解

1. equals()

1)equals和==的区别




2)如何重写equals

首先,如果不重写,我们在比较的时候,由于本类没有equals方法,它去找父类,Person没有继承其他父类,那就只能找到Object,而Object的equals源码只是比较两个对象是否一样,即内存地址是否一样,那自然不一样,返回false。


所以我们就需要去重写Object的equals方法。

基本数据类型判断的是值是否相等,==是比较运算符,也是运算的一种,不同数据类型运算时,先转成精度最大的一种比较,byte short char先转成int再做运算。

2. hashcode()

3. toString()

全类名就是包名+类名

4. finalize


5. 断点调试





【韩顺平 零基础30天学会Java】(第一阶段)(自用)相关推荐

  1. 韩顺平零基础30天学会Java【章7 面向对象编程(中级)】

    P273-P359 包 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 实际上就是创建不同的文件夹来保存类文件 语法 package 包名; 包的命名规则 只能包含数字.字母.下划线.小 ...

  2. 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P104~P129)

    写在最前边: 研究生一枚,为后端实习和未来工作打基础.无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了. 韩顺平老师课程地址:https://ww ...

  3. 【韩老师零基础30天学会Java 09】Math Arrays 数组拷贝 自然排序 System BigDecimal 银行家算法舍入 日期类LocalDateTime转换 String翻转

    Math abs绝对值 pow求幂 ceil向上取整 floor向下取整 round四舍五入 sqrt求开方 random求随机数 思考: 请写出获取a-b之间的一个随机整数,a,b均为整数?2-7 ...

  4. 零基础小白如何学会Java?

    Java作为目前使用最广泛的编程语言,自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现.作为跨平台语言,具有安全性.易用性.通用性等特点,被特意设计用于互联网的分布式环境. ...

  5. 观韩顺平的《0基础30天学会Java》后感

    万丈高楼平地起,在韩老师的带领下你的筑基期肯定很强,日后成仙指日可待. 开门先说重点:一定要加韩老师微信要资料!一定要加韩老师微信要资料!一定要加韩老师微信要资料!,重要的事情说三遍,千万不要去官网下 ...

  6. 零基础30天学会AE:从入门到精通系统教程

    下面这套<30天速成: 新手AE入门到精通教程>只需30天,每天一节课,让你快速提升自己技能. AE到底有什么作用呢?我们看的轩辕剑.枪战等影视作品,都可以通过AE来实现,成为影视 后期的 ...

  7. 最全面的WordPress建站教程,零基础30分钟学会建站

    宝塔面板添加WordPress站点 一.建站准备条件 条件1:阿里云服务器一台.原则上有台服务器就好了,不过我一般喜欢用大品牌,稳定和安全. 条件2: 阿里云域名一个.在哪家买的服务器,就用哪家的域名 ...

  8. 零基础适合学python吗-零基础更适合学习Java还是python?

    原标题:零基础更适合学习Java还是python? 最近有小伙伴向云和数据小编咨询,说想学习一门编程语言,但是没有任何基础,问是学习Java好还是学python更合适?对于这位小伙伴的问题,小编觉得有 ...

  9. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  10. 零基础10天学会网页制作第一天

    Hello,大家好,我是AbnerMing,从这篇文章起,我们开始进入为期10天的网页制作学习,具体怎么学习,及未来的就业前景,还请大家去看上一篇文章<零基础10天学会网页制作之前言>,这 ...

最新文章

  1. Mysql: pymysql 模块
  2. Lifecycle Activity和Fragment生命周期感知组件 LifecycleObserver MD
  3. 修改wordpress地址(URL)导致不能登录后台
  4. JavaScript是如何工作的:与WebAssembly比较及其使用场景
  5. python 断点调试 pdb
  6. [USACO5.3]校园网Network of Schools
  7. android theme 使用方法,Android入门之Style与Theme用法实例解析
  8. C++各个算数类型占用的字节数
  9. Spring Boot 核心原理与源码解析-大纲
  10. django 创建项目
  11. Mysql记录历史执行的sql
  12. mysql commit undo_详细分析MySQL事务日志(redo log和undo log)
  13. php 微信 other,PHP——仿造微信OpenId
  14. 麒麟操作系统安装达梦数据库实战
  15. 斯科特.H.杨:MIT 课程挑战者 __转
  16. 工业机器人导轨 百度文库_《工业机器人》复习资料
  17. C语言中-是什么意思啊?比如说 p=p-next 到底表达了什么意思,请说清楚点,还有-这个符号是一个整体吗,什么意思??...
  18. 关于NoSQL与SQL的区别
  19. 16.火星文转换 C#
  20. Facebook聊单,SaleSmartly有妙招!

热门文章

  1. 解决eclipse乱码问题
  2. 信息系统综合知识二 信息化基础知识
  3. 自动控制原理8.3---相平面法
  4. 使用Python采集淘宝类目数据并进行数据分析
  5. Linux镜像下载及虚拟机中安装
  6. 下载IDEA - 2020.1以及安装IntelliJ IDEA
  7. 计算机组成原理第五版(白中英)第八章输入输出系统 习题
  8. Springboot
  9. linux勒索病毒如何恢复数据,勒索病毒和相应的解密工具
  10. NLPIR文本分析工具的功能和特色介绍