JAVA整理(一)面向对象基础

news/2024/7/20 12:52:52 标签: 内存管理, java

一:面向对象与面向过程

  笼统说,一个流程简单一个复杂,面向过程好比开车上路,可以简单罗列出几个动作:上车,系安全带,点火,出发;面向过程好比造出一辆汽车,肯定不能从焊铁做起,第一步是收集所需要的各个部分(对象),通过一定的规律与逻辑去操作对象完成最终的结果。

  对象是实际的东西,类是对象的模板,对对象的抽象,对象就按照类所规定的模板去形成实际的对象。

面向对象三大原则:

封装:

  因为我们不想向外部暴露我们的数据,因为如果我们的数据对外暴露的话,我们的数据如果在某个被他人调用的地方被修改我们是不可知的,所以有个封装。你按我对外提供的接口进行操作,保证你不会对我对象内部的结构进行破坏。

继承与多态:

多态,就是多种形态。多态大致有两种情况:

​ 第一,假如,一个动物类,动物有一个run方法,我们用这个类描述动物的运动,然后有个猫,处于面向对象的相关联思想,猫继承自动物,然后猫不满意这个方法,重写了一个,猫的run的时候有一个叫的动作,不同对象,同一动作,最终执行的效果不同。

​ 第二:有一个猫,这个猫的run是有参数的,调用了猫的run方法,猫开始跑,每小时20迈,然后我们再调用run方法,传了一个鱼给猫,猫吃了鱼就更有动力,然后每小时30迈开始跑。同一个对象,同一个行为,传递的消息不同,最终执行的效果不同。

  继承与多态要一起理解,继承是基础,多态是扩展。因为对象之间会有重复的代码,所以我们有了继承,就像现实生活中子女继承父母的资源一样,但这种方法只能解决有关联对象间的代码重复问题。如果对象之间无关,解决代码重复,我们需要依赖AOP。

多态是在继承的基础上实现的,多态实现的三个必要条件:

继承 方法重写(override) 父类引用指向子类对象,例如:Human human = new Man() ,new Man() 是一个子类对象,用一个父类引用human来指向子类对象。 二:内存管理分析(初步) 栈内存,堆内存,方法区(隶属于堆里,但是有必要单独拉出来谈)

栈内存:

基本数据类型 ,结构大致为:变量名 :变量值 这样的表格形式

栈是线程私有的,连续的,不同线程之间无法共享数据。

速度快

堆内存:

堆是线程间共享的,区域比栈大,速度慢,不连续的

存储对象(在栈里对象存储的是一个地址,例如 张三:0X0001)对象张三具体的信息要去0X0001这块内存块里找。

方法区:

存储不变的东西:

类加载信息,静态变量,字符串常量。也就是不依赖具体对象的信息。

三:垃圾回收算法入门(引用计数,引用可达,通用分代垃圾回收)这部分深入要去看一遍《深入理解java虚拟机》

###引用计数法:

  每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用 的问题。(例如,)

###引用可达:

  从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。

通用分代垃圾回收:(基础时只需要知道有这几种方法即可)

四:内存分析静态变量,静态方法,静态初始化块

  静态变量与方法不需要具体的对象就可以调用(用类名调用),静态初始化块new后就会调用了。

五:重写Override返回值类型问题

方法的重写(override)要遵循两同两小一大的原则:(子类方法相对于父类方法)

1)两同 1.1)方法名相同 1.2)方法参数列表相同 2)两小 2.1)返回类型若为引用类型必须小于或等于父类的,若为基本类型或者void则必须相同 2.2)抛出的异常必须小于等于父类的 3)一大 子类方法的访问权限要大于等于父类的

六:javabean规则(一种类的规范)

这个Java类必须具有一个无参的构造函数 属性必须私有化。 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。 七:数组的定义,foreach的使用 for(int val:a) { System.out.println(val); }

转载于:https://juejin.im/post/5cd90ff35188256fbd3fc95d


http://www.niftyadmin.cn/n/1583181.html

相关文章

简单自定义mybatis流程!!

----简单自定义mybatis流程----一.首先封装daoMapperxml文件和sqlMapconfig配置文件,如何封装:(1).封装我们的Mapper.xml文件,提取名称空间namespace,提取方法名id,提取我们的结果类型resultType,再提取我们的sql语句sqlStatement创建实例对象封装.(2).封装我们的sqlMapconfig.…

杭州之行

也还行吧。 首先感谢只有一个学长报名了,然后我可能又是18级萌新中报名最早的那个,因为老师担心安全问题,不太放心低年级同学去。 感谢学长带我,我可能就是那个精力特别充沛的学弟吧,就没闲着,一直不在酒店…

周瑜:如果想要在程序员生涯中取得成不错的成绩,就得在忙碌的工作中不断学习。...

(全文较长,2260字,阅读须10min) 我不是一个伟大的程序员,我只是一个具有良好习惯的优秀程序员。——Kent Beck 周瑜,一个固执甚至刻板的男子,为了目标达成,他竭尽全力。为Dota游戏&a…

Loj #3111. 「SDOI2019」染色

Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图。其中一些结点有着已知的颜色,其余的结点还没有被染色。一个合法的染色方案不允许相邻结点有相同的染色。 现在一共有 \(c\) 种不同的颜色,依次记为 \(1\) 到 \(c\)。请问有多少对未…

校园无感知考勤:放学排队不拥堵

物联网发展推动着教育行业迈向新的阶段,北京桂花网为校园的管理提出了一套成熟的无感知勤解决方案。现有的考勤方式很容易发生混乱、排队等现象,造成教学管理的不便,因此桂花网安排在教室中央布置一台蓝牙路由器,通过蓝牙路由器与…

es6 单例

class Singleton {constructor() {this.conn this.connect();}static getInstance() {if (!Singleton.instance) {Singleton.instance new Singleton();}return Singleton.instance;}connect() {console.log(连接数据库);return { conn: "这是一个数据库句柄" };}f…

IDEA建立一个可运行的struts2项目

参考博客:https://blog.csdn.net/shuai_wy/article/details/79027573 直接使用IDEA创建struts2项目,配置好tomcat后是跑不起来的 需要修改一些地方: 1.web/WEB-INF/web.xml 有一行是发红的,路径不对,把中间 ng. 删掉 2.IDE左上角file点击&…

使用IP代理池和用户代理池爬取糗事百科文章

简单使用IP代理池和用户代理池的爬虫 import re import random import urllib.request as urlreq import urllib.error as urlerr#用户代理池 uapools ["Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0","Mozilla/5.0 (Windows N…