JAVA基础_构建开发世界的基本认知?(入门篇)

一、介绍

这篇文章大概有近来最粗糙的文章了。

个人一直认为什么东西都有自己的节律存在,代码同样的有自己的节律。在正式开发和深入代码之前有必要对其基础进行更为深入的了解。本文是最近学习和反思后的一些重整理。

二、分析

 

<基础概念>

你的代码经过修改可以去适应新的东西==>可维护性

你的代码不需要经过修改便能适应新的==>可扩展性

 

<继承>

1、将子类之间相同代码,提升到成一个相同的类,那么这个类父类。子类继承父类便拥有了父类的内容

2、子类对父类进行扩展

3、拥有父类的公有属性和公有方法

4、对父类的私有变量和私有方法不能使用

5、子类可以被当成父类的扩展,如果我们传参为父类,那么子类也可以被使用

 

<重写>

1、子类与父类之间存在着继承或实现关系。

2、子类对父类不满意,对父类的方法进行覆盖

3、方法名称相同,方法类型相同,参数类型,参数个数相同。

4、访问权限不能更小

5、返回类型必须是父类返回类型或者是父类返回类型的子类类型

6、不能抛出比父类范围更大的异常

 

启示:

@1、原则上父类的私有变量不能被子类直接用,那么有两种方式可以使用,一种是将父类的变量给改造成protected(同包及子类可见)

@2、为父类创建一个有参的构造方法,然后子类去调用父类的构造方法,将值给到父类,父类的变量由父类自己来使用创建。

每个对象在实例化的时候都会默认创建自己的无参构造器,并且有且只有一个无参构造器。当子类继承父类的时候,子类进行实例化会优先去对父类进行实例化。这个过程中如果父类没有声明的无参构造器,子类在创建无参构造器的时候同样会去通过super()为父类创建构造器。(父类存在有参构造器后默认不再主动创建无参构造器)

@3、当子类中存在父类的完全一样的变量,那么父类的变量就会被隐藏起来。父类的东西都继承给了子类,无论私有还是公有,但如果父类私有只能通过父类的方法区去调动。父类可以通过提供方法给子类使用。

 

<重载>

重载属于一种编译时多态,意味对同一行为作出不同的描述。也即是方法的多样性。他的特点是方法名称相同,参数类型或者参数个数不同,返回类型可相同也可以不同。

 

<多态变量>

类的本意:类型,变量的类型,方法的类型,类的类型等等

子类:子类的父类的一种子类型。那么也归属于父类的类型的范围内

启示1:子类的对象可以传递给需要父类对象的函数。子类对象也可以放进存放父类对象的容器中。

多态:在某个时刻他所管理的对象类型是会变化的。允许同一对象对同一请求做出不同响应。左声明右编译,同一编译,父类变量可以指向子类对象,也可以指向父类对象,调用不同的方法。变量可以指向声明类型的对象或者声明类型的子类型的对象。

 

<向上造型>

1、cast对于基本数据类型是类型转换,而对于引用对象类型是造型

2、把一个类型的对象赋值给另外一个类型的变量

3、子类的类型是可以赋值给父类类型的变量

4、变量的赋值是指变量去管理赋值过来的对象。而不是进行替换。

5、向上造型是可以的,但是如果向下造型则取决于父类对象原本的对象是什么,如果父类变量当前的对象指向了子类对象。那么再次向下造型是可以的,如果父类变量指向的就是父类对象,那么必然会报异常。(item实际的类型是什么,如果原本是子类型,那再次转下也是可以的)

6、数据转型:低层级的向高层级转化的可以直接赋值,高层级向低层级转化则需要强转,但是需要注明的是最后还是使用方法去转化

 

<Objects>

1、单根结构对象的顶端root,默认是一切的父类

2、toStirng返回一个对象的字符串表达形式,如果没有重写toString,则返回内存的地址。

3、equals :用于比较两个对象是否相同,但是objects只是提供了方法,需要自己去实现,当进行对象间引用的时候需要进行重写

 

<引用>

在计算机程序设计中,弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此默认是可以在任何时刻被回收。

 

<数据类型与引用类型>

堆和栈是java内存中存放数据的地方。java的类型一般分为基本数据类型和引用对象类型。我们平时所说的栈就是指的栈帧,我们把JVM运行的空间称之为运行时数据区,其中方法区和堆内存是属于线程共同占有的,而虚拟机栈,本地方法栈。在栈中主要存放着基本数据类型和引用值变量,也就是常说的字面值。在java的机制中,字面值的变化同样是先查找后创建,对于一个已经存在的数据,引用值会将地址指向该数据,但其指向后引用值指向的变更的不会影响到数据,有不会影响到其他同样指向该地址的引用变量!

我们程序所创建的对象则放到对象空间里面。java里面将这个对象空间分成了年老区和年轻区。其中年轻区又被细分成了E区,F区,T区。程序运行时创建的对象首先被统一放置在E区,当E区放满了则会触发一次垃圾回收,清空E区,将E区存活的对象放置到F区。当E区再一次被放满了则会再一次触发垃圾回收,清空E/F区,将E/F区里面存活的对象放置到T区。如此往返重复,对象随着GC在FT中反复复制,当超过某个数值,那么对象就会被复制到年老区中。当年老区也满的时候,则会执行Full GC,这个时候如果内存不够则会造成数据泄漏!

对于堆栈而言,new对象,静态资源和全局变量都放在堆中,而局部变量则是存放在栈之中。栈在程序中的体现是一个方法启动时候分配的一个小空间,当方法释放为该方法赋值的栈也就走到了尽头。包括基本数据类型以及引用值的存放等。
 

<String类型>

字符串均为不可变类型,存储于常量池或者对象空间创建。每次都会是先在堆中查找,如果查找不到在创建新的对象!并且栈中对其的每一个引用都是不可变的。这里的不可变是指对象不可变,当引用指向其他对象的数值时候,引用就不再是属于这个对象的了!

字符串人工的拼接底层都是通过StringBuilder去创建,相当于生成新的对象,是不放在常量池中的。

 

<微服务的理解>

将单体的架构拆分成很多微小的服务,服务之间通过rpc进行关联

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值