面向对象
Jian_FH
这个作者很懒,什么都没留下…
展开
-
对象的初始化过程
class Fu19{ Fu19(){ System.out.println("fu constructor run"); show(); } void show()//被覆盖,运行子类的。 { System.out.println("hehe"); }}class Zi19 extends Fu19{原创 2017-10-17 12:12:33 · 188 阅读 · 0 评论 -
异常----RuntimeException与其他的一些区别以及throw与throws的区别
/* 异常的分类: 1,编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系。 这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。 这样的问题都可以针对性的处理。 2,编译时不检测异常(运行时异常) 这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用的原因导致的或者引发了内部状态的改变导致的原创 2017-10-19 10:57:44 · 1316 阅读 · 0 评论 -
异常----自定义异常
/* 对于角标是整数不存在,可以用角标越界来表示。 对于是负数的情况,我们不乐意用越界来表示, 而负数角标这种异常在java中并没有定义过。 那么就按照java异常的创建思想,面向对象,将负数角标进行自定义描述。并封装成对象。 这种自定义的问题描述成为自定义异常。 注意:如果让一个类继承异常类,必须要继承异常体系,因为只有成为异常体系的子类才有资格具备可抛型。 才可以被两个关键字操作:原创 2017-10-19 10:15:49 · 255 阅读 · 0 评论 -
异常----异常对象的抛出
class Demo{ public void method(int[] arr,int index) { if(arr == null) { throw new NullPointerException("数组的引用不能为空!"); } if(index >= arr.length)原创 2017-10-19 09:20:56 · 433 阅读 · 0 评论 -
异常----体系
/* 异常的体系: 因为代码可能出现的问题很多,因此我们可以考虑抽取他们的共性 如问题的名字、信息、位置等等,我们将共性向上抽取,就形成了异常体系。 最终问题(不正常情况)就分成了两大类。 Throwable(父类: 1,一般不可处理的。(用Error类来表示 特点:是由jvm抛出的严重性的问题。 这种问题发生一般不针对处理。直接修改程原创 2017-10-18 20:56:47 · 230 阅读 · 0 评论 -
面向对象第三个特征----多态II(类型判断)
abstract class Animal{ abstract void eat();}class Dog extends Animal{ public void eat() { System.out.println("啃骨头"); } public void play() { System.out.println("玩球球");原创 2017-10-01 17:05:31 · 299 阅读 · 0 评论 -
面向对象的第三个特征----多态I
/* 多态: 某一种事物的多种存在形态。 class 动物 {} class 猫 extends 动物 {} class 狗 extends 动物 {} 一个猫对象,存在了多种形态: 动物 x = new 猫();//一个对象,两种形态。 父类创建的,指向了子类的对象。 猫这类事物,既具备了猫的形态,又具备了动物的形态, 这就是对象的多态性。 简单说,就是一个对象对应着不同类型。 多态原创 2017-10-01 16:53:29 · 202 阅读 · 0 评论 -
异常----概述
/* 异常:是在运行时期发生的不正常情况。 在java中用类的形式对不正常情况进行描述和封装对象。 描述不正常的情况的类,就称为异常类。 以前正常流程代码和问题处理代码相结合, 现在将正常流程代码和问题处理代码进行分离。提高阅读性。 其实,异常就是java通过面向对象的思想将问题封装成了对象。 并用异常类对其进行描述。 不同的问题用不同的类进行具体的描述。比如角标越界,空指针等等。 */原创 2017-10-18 20:26:52 · 296 阅读 · 0 评论 -
接口----应用
//笔记本电脑/*鼠标的使用class Mouse{}public class InterfaceDemo3 { public static void main(String[] args) { useMouse(new Mouse()); } public static void useMouse(Mouse m) { m.open();原创 2017-09-30 22:07:24 · 275 阅读 · 0 评论 -
接口----细节
/* 一个类在继承另一个类的同时,还可以实现多个接口。 接口的出现,避免了单继承的局限性。 */interface A{ public void show();}interface B{ public void show();}class Q{ public void method() { }}class DemoImpl2 extend原创 2017-09-30 20:05:50 · 196 阅读 · 0 评论 -
接口----多实现
/* 在java中不直接支持多继承,因为会出现调用的不确定性。 所以java将多继承机制进行改良,在java中变成了多实现。 一个类可以实现多个接口。 为什么可以? 因为接口中的方法没有方法体,而继承中方法有方法体。 */interface A{ public void show();}interface B{ public void show();}/*另原创 2017-09-30 19:46:23 · 1186 阅读 · 0 评论 -
面向对象第二个特征----继承III(子父类中的构造函数)
/* 继承 子父类中的构造函数 在子类构造对象时,发现,访问子类构造函数时,父类也运行了。 为什么呢 原因是:在子类的构造函数中第一行有一个默认的隐式语句:super(); 子类的实例化过程:子类中所有构造函数(打星号 所有)默认都会访问父类中空参数的构造函数。 为什么子类实例化过程中要访问父类中的构造函数呢? 举个简单的例子 class fu{int num; fu(){num = 1原创 2017-09-21 15:11:00 · 206 阅读 · 0 评论 -
面向对象的第二个特征----继承III(子父类中成员的特点与覆盖)
/* 在子父类中,成员的特点体现。 1,成员变量。 2,成员函数。 3,构造函数。 *///1,成员变量。/* 当本类的成员和局部变量同名用this区分。 当子父类中的成员变量同名用super区分父类。 this 和 super用法很相似。 不同:this 代表一个本类对象的引用。 super 代表一个父类的空间。不代表父类对象(自始至终,父类对象都没有创建) */原创 2017-09-21 10:24:12 · 267 阅读 · 0 评论 -
匿名内部类----细节
class Outer8{ class Inner extends Object { public void show(){} } void method() { Object obj = new Object() { public void show() {原创 2017-10-17 11:22:22 · 259 阅读 · 0 评论 -
异常----异常捕捉try&catch
/* 异常处理的捕捉形式: 这是可以对异常进行针对性处理的方式。 具体格式是: try { //需要被检测异常的代码 } catch(异常类 变量)//该变量用于接收发生的异常对象。 { //处理异常的代码 没catch没处理 } finally { //一定会被执行的代码 } */class FuShuIndexException exte原创 2017-10-21 11:28:21 · 335 阅读 · 0 评论 -
匿名内部类----应用
interface Inter6{ void show1(); void show2();}class Outer6{//非匿名内部类// class Inner implements Inter// {// public void show1() {// // }// public void show2() {原创 2017-10-17 10:56:15 · 245 阅读 · 0 评论 -
匿名内部类----概述
/* 匿名内部类。就是内部类的简写格式 必须有前提: 内部类必须继承或者实现一个外部类或者接口。 其实就是一个子类对象。 格式:new 父类or接口(){子类内容} */abstract class Demo5{ abstract void show();}class Outer5{ int num = 4;// class Inner ex原创 2017-10-17 10:30:50 · 182 阅读 · 0 评论 -
内部类----局部内部类
//内部类可以放在局部位置上class Outer3{ int num = 3; void method() { final int x = 9;//局部变量 class Inner3 { void show() { System.out.pri原创 2017-10-17 10:29:16 · 200 阅读 · 0 评论 -
内部类----细节
/* 为什么内部类能直接访问外部类中的成员? 那是因为内部类持有了外部类的引用。 外部类名.this */class Outer2{ int num = 3; class Inner2 { int num = 4; void show() { int num = 5;原创 2017-10-17 10:25:32 · 162 阅读 · 0 评论 -
内部类----概述
/*内部类访问特点:1,内部类可以直接访问外部类中的成员。2,外部类要访问内部类,必须建立内部类的对象。一般用于类的设计。分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。这时就是还有的事物定义成内部类来描述 */class Outer{ static private int num = 31; static class Inner原创 2017-10-17 10:15:36 · 154 阅读 · 0 评论 -
Object类----toString方法
/* 一般来说 object的子类一般都会覆写toString hashcode equals。 */class Person5{ private String name; private int age; Person5(String name,int age) { this.name = name; this.age = ag原创 2017-10-25 15:31:14 · 226 阅读 · 0 评论 -
object类----getClass方法
class Person5{ private String name; private int age; Person5(String name,int age) { this.name = name; this.age = age; }}public class GetClassDemo { public stat原创 2017-10-25 15:22:33 · 421 阅读 · 0 评论 -
Object类----equals方法与equals覆写
/* object:所有类的根类 object是不段抽取而来的,具有所有对象都具备的共性内容。 常用的共性功能: *//*class Fu //extends Object { Fu() { super(); }}class Zi extends Fu //子类并不继承object 因为java没有多继承 { Zi() {原创 2017-10-24 10:37:00 · 338 阅读 · 0 评论 -
异常----注意事项
/* 异常注意事项: 1,子类在覆盖父类方法时,如果父类的方法抛出了异常, 那么子类的方法只能抛出父类的异常或者该异常的子类。 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集。 简单说:子类覆盖父类只能抛出父类的异常或者子类或者子集。 注意:如果父类的方法没有抛出异常,那么子类覆盖绝对不能抛。就只能try。class AException extends Exception{原创 2017-10-23 21:31:17 · 218 阅读 · 0 评论 -
异常----应用与异常转换
/* 毕老师用电脑上课 问题中设计两个对象:毕老师 电脑 分析其中的问题: 比如电脑蓝屏啦 电脑冒烟啦 */class LangPingException extends Exception{ /** * */ private static final long serialVersionUID = 1L; LangPingException(原创 2017-10-23 20:55:12 · 513 阅读 · 0 评论 -
异常----finally代码块
class Demo2{ public int show(int index) { if(index < 0) throw new ArrayIndexOutOfBoundsException("越界啦!!"); int[] arr = new int[3]; return arr[index]; }原创 2017-10-23 15:09:10 · 359 阅读 · 0 评论 -
异常----多catch情况
//现在来讨论多catch情况class Demo15{ public int method(int[] arr,int index) throws NullPointerException,FuShuIndexException//进行多个声明 { //多个异常: if(arr == null) throw new NullPoi原创 2017-10-21 12:04:10 · 288 阅读 · 0 评论 -
面向对象第二个特征----继承II(什么时候使用继承)
/* 什么时候用继承呢? 分析第一种情况:① 1,两个类,发现有相同的功能show1,所以B去继承了A 2,可是,继承show1的同时,将show2继承了,show2不是B该有的功能。 3,因此,这个逻辑不可行。 第二种情况:② 1,将共同的功能抽取出来,创建了demo类 总结:当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy的一种,xxx extends yyy 所属关系:原创 2017-09-20 17:01:07 · 226 阅读 · 0 评论 -
面向对象的第二个特征----继承I(单继承与多重继承)
/**继承的好处: 1,提高了代码的复用性。 2,让类与类之间产生了关系,给第三个特征多态提供了前提。java中支持单继承,不直接支持多继承。但对c++中的多继承机制进行改良。单继承:一个子类只能有一个直接父类。多继承:一个子类可以有多个直接父类。(java中不允许,进行改良) 不直接支持,因为多个父类中可能有相同的成员,会产生调用不确定。 在jav原创 2017-09-20 15:44:53 · 692 阅读 · 0 评论 -
接口----实现
/*类与类之间是继承关系,类与接口之间是实现关系。接口和抽象类之间,有啥不同?抽象类中的成员不一定都是抽象的,例如我们之前做的雇员建模,里面的非抽象成员,我们是可以直接拿来用的。而接口中的成员都是抽象的。我们得全部覆盖,即类对于接口的实现。*//* 接口不可以实例化。 只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。 否则,这个子类就是一个抽象类。 */inte原创 2017-09-28 19:33:50 · 219 阅读 · 0 评论 -
静态代码块,构造代码块与构造函数
/* 静态代码块。 随着类的加载而执行。而且,只执行一次。 作用: 用于给类进行初始化。不是所有的类都需要创建对象,例如类中的方法是静态的。因此需要初始化类。 */class staticcode{ static { System.out.println("hahha"); } void show() { Syst原创 2017-09-16 09:23:49 · 179 阅读 · 0 评论 -
static关键字----主函数解析
/* public static void main(String[] args) 主函数特殊之处: 1,格式是固定的。 2,被jvm所识别和调用。 public:因为权限必须是最大的。 static:不需要对象的。直接用主函数所属的类名调用即可。 void:主函数没有具体的返回值。 main:函数名。不是关键字。只是jvm识别的固定的名字原创 2017-09-13 23:50:42 · 286 阅读 · 0 评论 -
static关键字----特点
/* static关键字 同时也是一个修饰符 如下列。当所有数据的某一个初始化成员变量为相同,且固定时,可以用static修饰,使其成为一个共享数据,而不需要每一个对象都要为此占据内存。 几个注意点: 1.static 修饰的变量比对象存在的更早。因为要事先创造出来以便对象调用。 2.static关键字不仅仅可以被对象调用,还可以被类直接调用。 3.static是一个修饰符,用于修饰成员。原创 2017-09-06 11:01:32 · 285 阅读 · 0 评论 -
this关键字----应用
//记住:你只要在本类中,用到了本类的对象,通常都要用this。//见下方例子,比较两个对象是否为同龄人。class Students{ private String name; private int age; Students(String name)//构造函数 { this.name = name; } Students(St原创 2017-09-06 10:15:15 · 171 阅读 · 0 评论 -
构造函数的特点区别与重载
/* 构造函数: 特点: 1.函数名与类名相同 2.不用定义返回值类型 3.没有具体的返回值 作用:可以给对象初始化。 创建对象都必须要通过构造函数初始化。 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。 如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。 一般函数和构造函数什么区别呢? 构造函数:对象创建时,就会调用与之对应的构造函数,对对象原创 2017-08-27 17:45:01 · 1110 阅读 · 0 评论 -
this关键字----使用场景二
提出疑问: 之前讲细节时,提到构造函数可以直接调用一般函数,一般函数不可以直接调用构造函数,因为构造函数是用来对象初始化的,若调用构造函数,即连对象都没有,因此不能调用。 那么,构造函数和构造函数之间如何访问?class Student_2{ private String name; private int age; /* 分析:原创 2017-09-04 23:56:36 · 617 阅读 · 0 评论 -
面向对象的第一个特征:封装III
封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处: 将变化隔离。 便于使用。 提高重用性。 提高安全性。封装原则: 将不需要对外提供的内容隐藏起来。 把属性都隐藏,提供公共方法对其访问。private:私有,是一个权限修饰符。用于修饰成员。私有的内容只在本类中有效。注意: 1.私有仅仅是封装的一种体现而已。 私有是封装,但封装不仅是私有。2.java中最常见,最小的原创 2017-08-19 15:54:29 · 200 阅读 · 0 评论 -
面向对象的第一个特征:封装II
/* 面向对象的第一个特征:封装。 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。/* 人属性:年龄 人行为:说话 */class Person{ /* 类中的规范操作: 1.一旦在类中规定成员变量,成员变量须是私有的 2.而且一个成员变量对应两个方法:一个set方法,一个get方法 3.因此,若变量数量大,岂不是要定义几十个方原创 2017-08-18 19:51:52 · 189 阅读 · 0 评论 -
面向对象的第一个特征:封装I
/* 面向对象的第一个特征:封装。 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。/* 人属性:年龄 人行为:说话 */class Person{ private /*2.加入关键词 私有 这时完全私有了,外部访问不了*/ int age; public void getAge(int a) { //3.通过内部的方法传值 并进行条件判定 i原创 2017-08-18 19:16:22 · 195 阅读 · 0 评论 -
基本数据类型参数传递与引用型数据类型参数传递
基本数据类型参数传递函数结束后会被释放。 而引用型数据类型参数传递因为引用地址,所以能够改变值。原创 2017-08-18 17:04:13 · 494 阅读 · 0 评论