构造函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数相关的知识,希望对你有一定的参考价值。
变量:存值
表达式:计算一个值 值
运算符:() =
语句: 编程
语句块:{。。。}
函数:名字{...}
数组:存多个值
面向对象语言:抽象 封装 继承 多态
java:
jdk:java开发环境 jre
jvm:虚拟机
jre:java运行环境 jvm+一些必要的类
类:描述事物
静态特征:姓名 身高 性别 -- 变量(属性)
动态特征:eat sleep study swim -- 函数(方法)
属性:不能重名!
方法:可以重名 ,构成了重载
重载:方法名一致,参数不一致即可(参数的个数,类型,顺序) 与返回值无关
构造函数可以重载
*** 方法调用是根据不同的参数调用不同的重载方法
类与对象:类是创建对象的模板 电子档试卷(类) 打印出来(对象)
如何创建对象:new People() new:开辟内存空间 People():构造的对象
构造函数:类的名称 (){} 专门用来创建对象 同时在创建对象的时候 还可以赋值 如果构造函数是否成功执行 标志着 对象创建的成功与否
不能自己调用 是虚拟机调用 创建对象
每个类都有一个默认的构造函数(无参),如果你在类里面显示的写了一个构造函数,那么这个无参的构造函数 就不存在了
People p=new People();//创建people对象 并且 把这个对象的地址(指针) 赋给 变量 p
this:表示当前对象(指针)
类与类:
继承(extends):节省代码 继承的是那些允许被继承的(public protected ) 提供 子类对象访问父类成分的一种途径
属性覆盖:子类覆盖父类的属性,只要属性名称一致就可以了,类型可以不一样 通常在属性中 很少 覆盖父类的属性
方法覆盖:方法名一致 参数一致 返回值一致 访问控制 权限 越来越 宽泛
***构造函数不能覆盖
创建对象:先创建父类对象 再创建子类对象
super:父类对象(指针)
super()是调用父类的构造函数 ,写与不写都存在,如果显示的写出来,只能在构造函数的第一行,super中的参数决定调用哪个构造函数
组合:一个类的对象拥有另一个类的对象
多态:字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态 (父类引用指向子类对象)
多态前提是继承
2种环境:
编译时环境:只要符合java的基本语法
运行时环境:产生什么对象 就是执行该对象成分
接口(interface):定了一套规范和标准 可以有方法(没有方法体)和属性(常量)
接口 不是类 它没有构造函数 也不能够(不需要)创建对象 专门给类实现的
java语言只支持单继承(C++语言支持多继承) 支持实现多个接口 -- 某种程度上降低了 单继承带来的 功能缺失
接口中的方法 都是抽象方法
抽象类(abstract class):描述一些抽象的事物 专门被继承的
抽象类中可以有抽象方法 也可以没有抽象方法 (可以全部抽象方法,可以全部不是抽象方法)
抽象类 中的抽象方法 ,子类一定要实现
抽象类 有构造函数 但是不能直接创建对象 子类创建对象的时候 ,可以产生父类对象 已供子类继承
抽象类与接口:
抽象类 可以实现全部或部分接口方法, 也可以不实现接口的方法,如果抽象类不实现接口方法 子类一定要实现剩下的接口方法
抽象类可以实现接口方法,并且在接口方法中 抛出其它抽象方法,屏蔽子类直接操作接口方法
final:不能改变
属性:常量(不能改变值)
构造函数:不能修饰
方法:不能被覆盖
类:不能被继承
static:静态 -- 类的成份
类:不能修饰类
属性:静态属性(变量) 类的属性
构造函数:不能修饰
方法:静态方法 类的方法
代码块:每次创建对象的时候 会促发 代码块执行 只执行一次
静态代码块 :会在 类加载的时候 执行一次 且 只执行一次
访问控制权限:private (defalut) protected public
private :本类中访问
(defalut) :同包中访问
protected :子类或同包中访问
public:都可以访问
8种基本数据类型:byte boolean char short int float long double
String;不是基本数据类型 但是它表示出基本数据类型的特征
常用类介绍:
String:字符串
字符串池:第一次创建字符串变量时,会到池中照这个变量值,如果没有创建一个 放入池中,后面直接从池中拿这个值,
但是new 会开辟新的内存空间 (==比较的是地址)
StringBuffer:能够追加字符串 (解决字符串常量问题)
StringBuilder 与 StringBuffer 一样,只是线程不安全
Date:表示时间 主要用到new Date()创建时间 ,后来逐渐被Calendar 取代,Calendar 描述日期更为丰富
Math:主要用来数学计算 , 常用 random 获得随机数,round 取整。
异常:
Throwable:包含Error 和 Exception。
Error :比较严重的问题 ,系统性问题 (虚拟机出题,系统出现问题)
Exception:程序出现的一些问题,通常是由于程序人员考虑不周等情况 发生的问题
(程序出现的问题,这些问题本省可以避免)
异常分类:
1.运行时异常:不要求强制处理,只有在运行时可能发生异常
2.受检查异常(check):必须处理,不能会不会发生异常
(有些操作 jvm认为可能出现异常几率较大 所以要求强制处理 )
异常处理:
throws:主要针对受检查异常 ,写在方法上,表明该方法具有抛出异常的功能 ,能抛异常根据throws 后面跟的异常类型
( public static void main(String[] args) throws FileNotFoundException )
运行时异常不需要 throws 标明具有抛异常的功能
抛出:
1.jdk抛出:FileInputStream fis=new FileInputStream("D:/11.txt");
异常由jdk抛出来 逐级向上抛出 最后如果main也没处理 那么就抛给虚拟机,虚拟机接受异常 立即停止执行
2.人为抛出:throw 抛异常
throw new Exception("除数不能为0");
捕获:try {} catch (Exception e) {} catch (Exception e) {} finally{}
catch捕获异常 针对 try中的代码块,catch在捕获的时候只能捕获参数指定的异常,如果异常被捕获,那么不在向下捕获,跳出捕获模块,执行try catch模块下面的语句
try中产生异常,try中后面代码不在运行
finally:不能try中代码有木有异常 都会执行,除非强制退出JVM
一般 catch (Exception e) {} 放在catch模块的最后位置
一般不建议使用 try {try {} catch (Exception e) {} } catch (Exception e) {} ,try catch嵌套,
建议大家采用try {} catch (Exception e) {} catch (Exception e) {}
catch中不建议编写业务代逻辑码 try中代码要尽量少
//非常不建议,不够规范
// try {
// int n=i/j;
// }finally{
// System.out.println("--finally--");
// }
自定义异常:
1、能够更好的查找程序的错误
2、让异常信息更友好
***异常能够改变程序执行的流程
***提供程序出错的解决方式之一
复习2月18日内容
异常分为两大类:
Error + Exception(RuntimeException+受检查异常/编译期异常)
java程序写成的文件叫java源代码文件(.java)-->编译,字节码文件(后缀名是.class)-->运行,JVM
异常的五个关键字try{可能产生异常的代码} catch(异常类型 参数名){打印异常信息} finally{强制执行的代码,一般包括释放资源等}
try如果不紧跟这catch语句,则必须添加finally语句
try语句后续可以接多个catch语句,如果包含多个catch语句块,需要先写子类异常,再写父类异常
throws:抛出异常:方法名 throws 异常类型名称
throw:抛出一个具体的异常 ,写法:方法体内throw 一个具体的异常对象;
面试笔试必考题:写出不少于5个的常见异常
ClassCastException:类型转换异常
NullPointerException:空指针异常
ArithmeticException:数学异常
IndexOutOfBoundsException:索引越界异常
IllegalArgumentException:参数异常
FileNotFoundException:文件没有找到异常
ClassNotFoundException:没有找到类异常
2月19日内容
1、java中所有类的祖先类都是Object,一个类如果没有显示写出父类,那么系统默认父类是Object
2、建议子类重写父类的toString方法,直接输出一个对象名其实是调用了此对象的toString方法
3、toString: 包名.类名[email protected]+一段数字,为什么字符串的toString方法返回形式不是这样呢?因为字符串重写了父类的toString方法
重写:在继承关系中,子类的方法名、参数类型、返回值完全和父类一致,方法的重写
4、hashcode是对象地址的整数映射
5、getClass返回值class 包名.类名
6、阐述final、finalize、finally三者的区别
final可以修饰类、属性和方法,修饰类时类不能被继承,属性的属性表示常量,修饰的方法表示方法不能被重写
finalize垃圾回收器调用的方法
finally异常中必须执行的方法(提前中断有可能不执行)
7、当equals方法被重写时,通常有必要重写 hashCode 方法
8、final修饰的属性是只引用不可变还是值不可变?
9.字符串使用构造方法初始化和使用"="初始化区别
本文出自 “11149571” 博客,请务必保留此出处http://11159571.blog.51cto.com/11149571/1743270
以上是关于构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段