java对象

来源:互联网 发布:时序数据挖掘 编辑:程序博客网 时间:2024/05/24 22:45
* 一.子类对象的初始化
1.创建子类对象
在创建子类对象时, 默认会调用父类无参的构造函数.
因为子类可以当做父类来用, 父类有的功能子类都有, 如果父类在构造函数中做了一些工作, 创建父类对象时就可以完成这些工作, 那么子类也应具有此功能.
在创建子类对象的时候, 其实是先创建了一个父类对象, 在创建父类对象的时候, 就需要调用到父类的构造函数.
2.调用父类构造函数
子类在创建对象的时候, 一定会调用一次父类的构造函数, 因为需要创建父类对象.
如果不显式的调用, 默认在构造函数中会有一行super(), 调用父类无参的.
我们也可以使用super()传入参数, 调用父类有参的构造函数.
super()和this()一样, 都是只能在构造函数的第一个语句出现. 
所有构造函数的第一个语句要么是this(), 要么是super(), 如果不写, 默认是super()   
        3.子类继承和调用父类的构造方法


 


1.如果子类没有定义构造方法,则调用父类的无参数的构造方法,.


2.如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。


3.如果子类调用父类带参数的构造方法,可以通过super(参数)调用所需要的父类的构造方法,切该语句做为子类构造方法中的第一条语句。


4.如果某个构造方法调用类中的其他的构造方法,则可以用this(参数),切该语句放在构造方法的第一条.


说白了:原则就是,先调用父亲的.(没有就默认调,有了就按有的调,反正只要有一个就可以了.)







* 二.覆盖父类方法
1.重写(Override)和重载(Overload)的区别:
他们的共同点是方法名相同.
重载是方法名相同, 参数列表不同, 和返回值类型无关.
重写是方法名相同, 参数列表相同, 返回值类型也相同(子类返回值类型是父类返回值类型的子类也可以).
2.重写时的注意
子类覆盖父类的方法时, 不能比父类的访问权限更弱.
子类覆盖父类的方法时, 不能比父类抛出更多的异常
因为父类有的功能子类都要有, 所以子类只能比父类强, 不能比父类弱.
3.调用被覆盖的方法
如果想调用被父类被覆盖的方法, 可以使用super.方法名


四.Object类中的方法
1.finalize()
此方法在对象销毁之前执行
2.toString()
此方法可以将对象转为字符串表示形式.
Object类中默认是转为 类名@地址
如果我们自定义的类不想转为此种格式, 可以重写toString().
在使用 System.out.println(); 方法时, 如果传入的实参是一个对象, 那么打印的就是对象的toString()方法的返回值.
* 3.equals()
在程序中我们经常会对一些对象进行比较, 这时我们通常会以对象的属性来做比较, 如果两个对象的所有属性都相同, 我们就认为他们相同.
以后在自己写一个类的时候, 最好重写一个equals方法, 这样别人就可以使用equals方法来比较两个对象的属性了.
如果以后我们要比较两个对象, 就使用equals方法. java写好的类都会重写equals方法. 那么我们自己写的类最好也重写这个方法.
* 以后写类时写equals方法, 比较对象时调用equals方法.
4.注解
为了检查覆盖是否成功, 我们在覆盖父类的方法时可以使用 @Override 来测试.

五.多态
1.以不变应万变
定义一个方法的时候, 将形参定义为父类类型, 以后所有子类对象都可以传入.
根据传入的实参类型不同, 运行的结果也就不同.
2.向后兼容
将形参定义为父类对象, 而不是具体制定某一子类.
这样以后如果新定义一个类, 只要继承于指定的父类就可以传入.
先写的代码可以调用后写的代码.
* 以后写方法时, 形参尽量定义成父类类型, 这样可以让更多对象传入.

六.抽象类
1.什么是抽象类
使用abstract修饰的类就是抽象类, 抽象类不能被实例化.
使用abstract修饰的方法就是抽象方法, 抽象方法没有方法体, 如果一个类中有抽象方法, 必须声明为抽象类.
没有抽象方法的类, 也可以声明为抽象类. 在GUI的Adapter中有使用.
如果将构造函数private, 也可以阻止别人创建对象. private是对外不可见, 类内部可以用.
2.什么时候用抽象类
当我们定义的多个类有相同的方法声明时, 就可以抽象到父类中定义.
这时别人看到我们的父类的抽象方法, 就知道所有子类中都会有这个方法.

七.final
1.final类
最终的类, 不能被继承
2.final方法
最终的方法, 不能被覆盖
3.final变量
最终的变量, 只能赋值一次. 注意基本数据类型和引用数据类型的区别, final变量是指变量中存的内容不能被改变.常量名的方式访问。
4.全局常量
使用public static final修饰的常量(变量)是全局常量, 一般全局常量的字母全部大写.使用类名.

八.单态(例)设计模式
1.什么是设计模式
在编程的过程中, 经常遇到的一些问题, 经过前人的理论总结和实践经验, 优选出的一些代码, 类似于棋谱和公式.
2.什么是单态设计模式
如果一个类在整个程序中只能有一个实例, 那么这种情况, 就可以使用单态设计模式.
3.单态设计模式的写法
a).私有化构造函数, 类外部不能创建对象.
b).在类内部创建一个对象, 定义一个该类类型的成员变量引用这个对象.
c).定义一个公有的方法, 让别人可以获取到这个唯一的对象.


* 九.组合设计模式
1.什么时候用组合
在定义一个类的时候, 需要使用另一个类的方法, 就可以使用组合设计模式.
2.实现步骤
a).先定义一个需要类的类型的成员变量
b).通过构造函数将一个这个类型的对象组合进来
c).在需要使用这个类的方法时, 通过属性调用方法
3.组合设计模式和继承的区别
有的时候一个类需要另一个类的方法, 这两个类又没有逻辑上的继承关系, 就不适合用继承, 可以用组合.
由于Java只支持单继承, 在使用别的类的方法时如果用继承的方式, 那么这个类就无法再继承其他类了, 而组合设计模式就没有这个缺点.


十.模板设计模式
1.什么时候用模板设计模式
在做一件事的时候, 需要先定义一个模板, 以后执行时按照模板定义的步骤去做.
2.实现方式
先定义一个抽象类作为模板
在类中定义抽象方法, 每一个方法是一个步骤
再定义一个供外界调用的主方法, 这个方法中调用抽象方法完成每一个步骤. 
这个主方法使用final修饰, 不能修改.




一.接口
1.接口的定义方式
使用interface关键字定义
其中所有方法都是抽象的
所有方法默认被abstract public 修饰
2.接口的使用
使用implements实现一个接口
实现一个接口需要将所有的方法都重写, 或者将当前类声明为抽象
3.接口继承接口
接口可以使用extends关键字继承另一个接口, 如果父级接口不冲突, 一个接口可以继承多个接口
4.接口和抽象类的区别
抽象类中可以有不抽象的方法, 接口中所有方法都是抽象的
抽象类使用abstract class定义, 接口用interface定义
抽象类中的方法修饰符没有特殊之处, 接口中的方法默认被abstract public修饰, 接口中的变量默认被public static final修饰
抽象类的子类使用extends继承, 接口的子类使用implements实现
一个类只能继承一个抽象类, 一个类可以实现多个接口
如果我们要定义一个类时, 其中所有方法都是抽象的, 那么就声明为接口, 如果其中需要有不抽象的方法, 那么就声明为抽象类

二.异常
1.什么是异常
Java程序在运行的过程中遇到的错误
2.异常的分类
所有错误和异常都是Throwable的子类
a).Error: 严重的错误, 一般由虚拟机直接抛出, 程序无法对其进行处理.
* b).Exception: 所有异常的父类
* c).RuntimeException: 运行时异常
* 3.运行时异常和编译时异常
运行时异常一般都是一些经常出现的错误, 程序中不对其进行处理, 编译不报错. RuntimeException的子类
编译时异常, Exception中除了RuntimeException的部分都是编译时异常, 如果有可能抛出这些异常, 那么在代码中需要进行处理. 否则编译报错.
* 4.处理异常
a).声明抛出, 如果在程序中有可能出现编译时异常, 可以在方法签名最后使用 throws 异常名 的形式声明这个方法有可能抛出异常.
b).捕获异常, 使用try...catch语法, 监视某段代码, 如果抛出了catch中指定的异常, 就运行对应的catch代码
5.try...finally
try语法除了配合catch使用, 还可以配合finally使用, 进入try代码之后, 无论是否抛出异常, 方法是否结束, 都会运行finally中的代码.
* 6.子类抛出异常
如果子类继承父类重写方法, 那么子类抛出的异常只能是父类异常的一个子集.
子类不能比父类抛出更多的异常, 子类不能比父类的功能弱.
7.处理多个异常
a).在throws后面以逗号分隔, 声明抛出多个
b).在try语句后, 跟多个catch, 或者捕获这些异常的父类
        8.自定义异常Demo7.java
在写程序过程中,发现会有错误,现有的异常类都不足以描述当前的错误场景,这个
时候,就需要自定义一个异常类,封装异常信息
1)自定义编译时异常
定义一个类继承Exception,重写getMessage方法,返回一个自定义的异常信息
2)自定义运行时异常
定义一个类继承RuntimeException,重写getMessage方法,返回一个自定义的异常信息
throw和throws的区别?
throws用于在方法后声明方法向外抛出了一个异常
throw用于方法内,向外抛出一个异常对象,方法遇到throw就结束执行,跟return一样

9.如果只是单纯打印异常信息,不需要使用finally,其实try... catch和throws效果差不多
Demo8.java
。。。。异常总结
如果程序中运行一段代码, 有可能出现异常, 那么有两种处理方式, 要么捕获, 要么抛出.我们通常在被调用的方法后声明抛出异常,在MAIN函数中或者执行方法时捕获异常。
如果我们需要对异常进行处理, 那么就catch, 不处理就抛出.



一.package
1.package使用
package语句要写在java代码的第一条语句
2.类的修饰符
如果一个类想在其他包中使用, 那么必须是public的
一个类如果是public的, 那么必须和文件名同名
3.编译带包的类
javac -d . Person.java
-d是指定将生成的class文件放在哪个目录, .代表放在当前目录
4.导入包
一个类调用另一个类, 如果两个类在同一个包中, 不需要导包
如果被调用的类在java.lang包中, 不需要导包
其他情况需要导入调用的类所在的包
三种方式:
a).以*形式导入, 例如: import cn.itcast.day9.*;
这种导入形式是导入cn.itcast.day9下所有类, 但是如果当前包中有需要的类, 就不会找导入的包
b).以全限定名形式导入, 例如: import cn.itcast.day9.Person;
这种导入形式只导入一个类, 不论当前包有没有, 都会找指定的类
c).在使用的时候写全限定名, 例如: org.it315.day9.Person p1 = new org.it315.day9.Person("张三", 22);
如果一个类中使用到两个相同类名的类, 那么用a和b形式就无法导入了, 可以指定全限定名.
5.运行带包的类
java org.it315.day9.PersonTest
要使用类的全限定名(包名.类名)
6.类之间调用
无包的类可以调用有包的类
有包的类不能使用无包的类, 因为不导入包是找当前包, 而没有包的类又无法导入
*** 7.总结
我们定义类时一定都要带包, 目的是让别人都能访问到, 如果不写包, 那么别人代包的类无法使用.
导入包时使用全限定名形式导入, 这样不会因为当前包中有相同类名的类导致出错.
写类的时候要使用public修饰, 否则在其他包中不能访问. 如果类是public, 必须和文件名相同.
javac -d . Person.java
java org.it315.day9.PersonTest
如果一个类想被其他包中访问, 就需要定义为public, public的类必须和文件名一致, 那么就必须单独写一个文件.

二.jar
1.什么是jar
jar是一种java文件的压缩格式, 通常我们会将class文件压缩成一个jar包
* 2.打jar包的方式
jar cvf day9.jar cn org
jar 参数 jar包名 文件夹名(文件名)
*** 3.使用jar包中的类
如果程序中需要使用到jar包中的类, 那么需要将jar包的绝对路径配置到classpath中
4.批处理文件
如果我们经常要执行一些相同的命令, 那么可以将这些命令写入一个文件, 命名为xxx.bat, 以后再运行这个bat文件, 就相当于执行了那些命令
* 5.运行jar
java -jar day9.jar
java -jar jar包名
需要指定Main-Class, 一个jar包中可能有多个类可以运行, 我们需要指定从哪个类开始运行.
在jar包的 META-INF 中的 MANIFEST.MF 中添加 Main-Class, 例如: Main-Class: cn.itcast.test.Test
6.exe4j
将jar包生成为exe文件
安装exe4j exe4j_ejtechnologies.rar
next
jar in exe - next
起一个名字 - 确定输出的目录 - next
console - 输入文件名 - 传图片(必须是.ico, 可不传) - next
选择jar包 - 指定Main-Class - next
输入虚拟机最低版本 - finish

三.访问控制符
1.private: 只能类内部使用
2.default(package): 只能同一个包中使用
3.protected: 同一个包, 或者不同包的子类
4.public: 所有类

四.代码规范
1.标识符
包, 类, 方法, 变量这些名字可以以任意字母数字下划线和美元符号组成, 但不能以数字开头.
类名: 首字母大写, 后面每个单词首字母大写. 例如: XxxYyyZzz
方法名, 变量名: 首字母小写, 后面每个单词首字母大写. 例如: xxxYyyZzz
包名: 全小写. 例如: xxx.yyy.zzz
2.代码折行
如果一行代码很长, 可以折行, 折行的时候, 要将运算符写在下一行的开头, 并且按等级对其.



MyEclipse实用操作我们就介绍到这里,希望对你有所帮助。
议您先了解一下java的多态性.所谓静态绑定就是在程序编译时就绑定的.java中的变量都是静态绑定的,方法的话只有static和final(所有private默认是final的)是静态绑定的.




就是在编译的时候已经决定了变量的值和应该调用哪个类的方法.你要把它同动态绑定联系起来才好理解.
        
0 0
原创粉丝点击