摘要:一什么是类什么是对象现实世界是有很多对象组成的,基于对象抽出了类对象是真实存在的单个的个体,类是一类个体,类型类别类中可以包括所有对象所共有的特征属性变量所有对象所共有的行为方法一个类可以创建多个对象,同一个类的多个
一:什么是类 什么是对象
1.1现实世界是有很多对象组成的,基于对象抽出了类
1.2对象是真实存在的单个的个体,类是一类个体,类型/类别
1.3类中可以包括:
所有对象所共有的特征属性----变量 所有对象所共有的行为--------方法
1.4一个类可以创建多个对象,同一个类的多个对象,机构相同,数据不同
1.5类 是对象的模板,对象是类的具体的实例
二:内存管理
由jvm来管理
1.1用于存储所有new出来的对象(包括成员变量) 1.2成员变量的生命周期;创建new对象时存在在堆中,对象被GC回收时一并消失 1.3垃圾:没有任何引用所指向的对象 垃圾回收器GC不定时到内存中扫描,看到垃圾不一定马上回收 回收过程是透明的,并不是一看到垃圾就马上回收,想快一点可以调用System.gc() 1.4局部变量:调用方法时存在在栈中,方法结束时与之一并消失 1.5方法区: 用于存储.class字节码文件(包括方法) 方法只有一份,通过this来区分具体是哪个
继承
2.1目的:避免代码重复,有利于代码的复用
2.2通过extends实现继承
2.3父类/基类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为
2.4子类/派生类继承父类后,子类具有:子类+父类
2.5一个父类可以有多个子类,一个子类只能有一个父类-----单一继承
2.6继承具有传递性
2.7java规定:
构造子类方法之前必须先构造父类方法 子类构造之前没有调用父类的构造,系统默认super()来调用父类的无参构造 若自己调用了,则不再默认提供 super()调用父类构造,必须位于子类构造的第一行
super:指代当前对象的父类对象
1:super.方法名()-----调用父类的方法 2:super.成员变量名-----调用父类的成员变量 3:super()------------调用父类的构造方法 向上造型: 1:父类型的引用指向子类的对象 2:能点什么得看引用类型
三:方法
方法:方法的签名:方法名+参数列表
1.方法的重载overload:同一个类中,方法名称相同,参数列表不同 编译器在编译时自动根据方法的签名来绑定调用方法 2.构造方法(构造器,构造函数,构建器) 常常用于给成员变量赋初值 与类同名,没有返回类型 在创建(new)对象时被自动调用 若自己不写构造方法,则编译器默认提供无参结构的构造方法 构造方法可以重载 3.this:指代当前对象,那个对象调用指的就是哪个对象 方法中访问成员变量之前默认都有个this this的用法 this.成员变量名-------访问成员变量 this.(方法名)-------调用方法; this()--------------调用构造方法 4.引用类型数组: 4.1 cell[] cells = new cell[4]; cells[0] = new cell(2,1); cells[1] = new cell(2,8); cells[2] = new cell(5,5); cells[3] = new cell(3,5); 4.2 cell[] cells = new cell[]{ new cell(2,1); new cell(2,8); new cell(5,5); new cell(3,5); } 4.3 int [][] arr = new int [3] []; arr[0] =new int [2]; arr[1] =new int [3]; arr[2] =new int [2]; arr[1][0] = 100; 4.4 int [][]arr = new int [3][4]; for(int i = 0;istatic:静态的
1静态变量 由static修饰 属于类的,存在方法区中,只有一份 常常通过类名. 来访问 何时用:若所有对象的数据都一样时使用 2静态方法 由static修饰 属于类的,存在方法区中,只有一份 常常通过类名. 来访问 没有隐式的this来传递;静态方法中不能直接访问实例成员 何时用:方法的操作仅与参数相关而与对象无关 3静态块 由static修饰 属于类的,类被加载时自动执行,类只被加载一次,所以静态块也只执行一次 何时用:常常用于加载静态资源图片音视频等 *成员变量: 1.实例变量:属于对象的,存在堆中; 有几个对象就有几个实例变量; 必须通过对象名.来访问 2.静态变量: 由static修饰,属于类的,存在方法区中 只有一份 常常通过类名. 来访问 6.final:不能变 6.1修饰变量:变量不能被改变 6.2修饰方法:方法不能被重写 6.3修饰类:类不能被继承 7.static final常量 7.1必须声明的同时初始化 7.2通过类名.来访问,不能改变 7.3建议常量名都大写 7.4在编译的同时会自动转换为具体的值,效率高 1.抽象方法:由abstract修饰,只有方法的定义没有方法的实现 2.抽象类: 2.1由abstract修饰 2.2包含抽象方法的类必须是抽象类 2.3抽象类不能被实例化 2.4抽象类是需要被继承的,否则无意义,常用-----重写所有抽象类的方法 2.5意义: 2.5.1包含公共的属性和行为,被子类所共享 2.5.2为所有子类所提供一种公共的类型----向上造型 2.5.3包含抽象方法,为所有子类提供一个统一的方法,子类有不同的实现接口:
//接口是完全抽象的抽象类 1是一个标准、规范 2由interface定义 3只能包含常量和抽象方法,略的是public 4接口是不能被实例化的 5接口是需要被实现/继承的,实现类/子类: 必须重写接口中所有的抽象方法 3.6一个类可以实现多个接口,用逗号隔开,若又继承又实现,要先extends后implements 3.7接口可以继承接口多态:意义:
1.1同一类型的引用指向不同的对象时,有不同的实现 1.2强制类型转换,成功的条件有两个: 引用所指向的对象,就是该类型 引用所指向的对象,实现了该接口 1.3instanceof关键字返回的是boolean类型结果,强转成功的条件就是它为true的条件内部类,有自己独立的.class
1成员内部类 只服务于外部类,他的对象一般是在外部类创建的 内部类中可以直接访问外部类的成员包括private 内部类中有个隐式的引用指向创建他的外部类 2匿名内部类 常用 想创建一个只用一次的类的对象,该类可不必命名 匿名内部类中访问外部的数据,该数据必须final类型面向对象总结
面向对象的三大特征:
1.封装1.1 类:封装的是对象的属性和行为 1.2 方法:封装的是具体的逻辑功能实现 1.3访问控制修饰符:封装的是访问的权限2.继承:
2.1作用:避免代码的重复,有利于代码的重用 2.2父类:所有子类所共有的 子类:特有的 子类extends继承后:子类+父类 2.3单一继承,多接口实现,具有传递性3.多态
3.1意义:行为的多态、对象的多态 3.2向上造型、强制类型转换、instanceof 3.3多态的表现形式: 重写+重载
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77599.html
摘要:对象既是该类事物实实在在存在的个体。类与对象的关系图类就是汽车汽车就是堆内存中的对象。成员变量成员变量成员函数的车,轮胎数个,跑起来了对象的创建创建对象中创建对象,使用关键字在堆内存中开辟了空间,产生了一个实体。 声明:本文首发于我的个人微信公众号【Java编程社区】,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象。那么什...
摘要:学编程真的不是一件容易的事不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍。熟练掌握核心内容,特别是和多线程初步具备面向对象设计和编程的能力掌握基本的优化策略。 学Java编程真的不是一件容易的事,不管你多喜欢或是多会Java编程,在学习和解决问题上总会碰到障碍。工作的时间越久就越能明白这个道理。不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题...
摘要:而面向搜索引擎,就是我们要及时的使用百度谷歌遇到问题无法解决,先别急着放弃,可以去网络寻找答案,你的坑大部分别人都已经走过了,大部分都可以找到合适的解决方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●众多的语言,到底哪一门才是适合我的?●我们为什么要学习Java语言呢...
摘要:字符串也可以是一个对象日期是一个对象数学和正则表达式也是对象数组是一个对象甚至函数也可以是对象一般的语言,都是利用类来创建对象,完成面向对象的过程。 在之前的一篇文章的末尾我提到了JavaScript的对象创建方法,可以利用函数,内置对象和this等关键词实现对象的创建。但是很遗憾,我最先接触的面向对象的编程语言是java,因而对于这些实现面向对象的方法并非自己的首选。下面是那篇文章:...
摘要:一切都是对象之前自己学习就是以系统的角度去学习,就是我们把这些知识点罗列出来,然后做一个全面的学习。按照面向对象的思想,一切都是对象,不管什么数据都应该是对象,但是对于一些基础的数据类型为了运行效率和内存的优化,将个基本类型进行了特殊处理。 一切都是对象 之前自己学习Java就是以系统的角度去学习,就是我们把这些知识点罗列出来,然后做一个全面的学习。这样的的确确可以将知识点都学习全面,...
摘要:是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。而在基于原型的面向对象方式中,对象则是依靠构造器利用原型构造出来的。 JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征。本文将回归面向对象本意,从对语言感悟的角度阐述为什...
阅读 1711·2021-11-22 12:09
阅读 1451·2019-08-30 13:22
阅读 2082·2019-08-29 17:00
阅读 2634·2019-08-29 16:28
阅读 2945·2019-08-26 13:51
阅读 1174·2019-08-26 13:25
阅读 3237·2019-08-26 12:14
阅读 3006·2019-08-26 12:14