----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
jvm 在调用主函数时 传入是new String[0];
判断是不是那个类型 底下要转换
有什么用呢 这么说 在程序运行前也是可以传入一些值的
javac 启动编译器
java 命令调用虚拟机(jvm) 调用主函数main
这个时候就可以在cmd下 编译过后 调用之前
javac demo.java
java demo hehe hehe he 这样写之后main中的那个数组就有值了数组是{"hehe","hehe","he"}
这里用空格来间隔
**什么时候使用static?
要从2方面下手 因为static修饰的内容有成员变量和函数
什么时候定义static变量呢?
- 当对象中的出现而来共享数据时 (例如 我们都是地球人 一个城市的市民 拥有共同的所在地该城市名)
- 对象中的特有数据要定义成非静态存在于堆内存中
**什么时候定义static函数呢?
- 当功能内部没有访问到非静态数据或者是对象的特有数据 那么该功能可以定义成静态的
- 当函数里没有操作对象的成员变量 或者是参数直接写了就 那么就用static变量 也就是说不管你声称多少个实例
- 可他们都有相同的特性 不会出现特例 还有就是当函数里有非静态的就不能用static 一样的道理
- 将重复的功能在很多类中都用到的 就把这些功能单独封装在一个工具类中 这样子直接调用
- 每个应用程序中都有共性的功能 可以将这些功能进行封装 以便复用
对象是用于封装数据的 当调用不需要对象的时候不需要实例 直接调用 static
工具类构造函数私有化 private UtilDemo(){}
说明书:
/**
类的描述信息
@author
@version
*/
API 说明文档 application Interface
static 代码块
static{
...... 随着类的加载而执行 只执行一次 并优先于主函数 可以写多个 顺序执行
用于给类进行初始化
}
先执行静态代码块 多个顺序执行 然后是代码块一样的 然后就是构造函数看调用哪个了 然后执行相应调用的函数
实例化对象:
- 先执行该类的 static代码块 如果有的话 然后给类进行初始化
- 在堆内存中开辟空间 分配内存地址
- 在堆内存中建立对象的特有属性并默认初始化
- 对属性进行显示初始化
- 对对象进行构造代码块初始化
- 对对象进行对应的构造函数初始化
- 将内存地址付给栈内存中的 实例化对象
堆中 实例化 引用类型
栈中 局部变量 --------------运行完就释放了
方法区 static 的变量及当前的class
非静态省略(this. )static 省略 ( 类名.)
单利设计模式
设计模式:解决某类问题最行之有效的方法java中23中设计模式
( 是早期建筑的概念 将常用的规律总结出来形成模式 照着做就行)
软件设计模式 属思想 是在日常作业中累计的
常见的设计模式 :
单例模式:解决一
个类在内存中只存在一个对象
为了避免其它程序过多建立该对象 先禁止其他程序建立该类对象------将对象私有化 私有构造函数
还为了让其他程序可以访问到该类对象 只好在本类中 自定义一个对象-----
为了方便其他程序对自定义对象的访问 可以对外提供一些访问方式--------
class Person{
private Person(){}
public static Person instance=new Person();
public static Person getInstance(){
return instance;
}
}
调用单例
首先方法区中有一个调用的对象加载 这里 了一个static对象就给到堆内存里了然后方法区中的对象指向堆内存中的之前实例的对象的引用 以及调用的static方法 如果调用单例的函数内用了实例对象来接收获得的单例对象也就是说实例对象指向堆内存中原先单例对象的空间 这样就达到操作的时同一个对象的原理
保证对象的唯一性
对于事物该怎么描述还怎么描述 当需要将该事物的对象在内存中唯一时 就将以上的三步加上即可
synchronied 同步锁 一次只能进入一个对象 修饰方法多线程技术
继承:
将共有的属性 用继承的方式来操作 在外面定义个父类 子类继承并优化自己的属性 可以使用父类的属性
提高代码的复用性
让类与类之间产生关系 有了这个关系 才有了多态的特性
注意:千万不要为了获取其他类的功能 简化代码而继承
必须是类与类之间有所关系才可以继承 所属关系 is a
]
‘java只支持单继承 不支持多继承 因为多继承容易带来安全隐患 当父类中定义了相同功能 当功能不同时 不确定要运行那一个
但是java保留了这种机制 并用另一种形式来表示 多实现
java支持多层继承
聚集:
组合:
super的使用和this几乎一致
this代表的是本类对象的引用
super代表的是父类对象的引用
子类继承父类 就相当于子类拥有父类所有可见属性 当子类没有该属性父类有时 this super都指向父类对象
子类可以重写父类的方法
记住:
重载只看同名函数的参数列表
重写 子父类方法要一摸一样 包括返回值类型
在子类对象进行初始化时 父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句super()
super() 会访问父类中空参数的构造函数 而且子类中所有的构造函数都默认第一行有一个super()
为什么子类一定要访问父类的构造函数?
因为父类重的数据 子类可以直接获取 所以子类对象在建立时 需要先看父类是如何对这些数据进行初始化的
所以子类在对象初始化时 要先访问下父类的构造函数
如果要访问父类中指定的构造函数 可以通过手动定义的方式来指定
]
注意: super()一定在子类函数的第一行
构造函数 this super只能由一个 都是放在第一行的 子类中至少有一个是访问父类的 否则就递归了 自玩
子类的实例化过程 如下
结论: 子类中所有的构造函数 默认都回访问父类中空参数的构造函数 因为每一个构造函数的第一行
都有一个隐式的super() 当父类中没有空参数的构造函数时 子类必须手动通过super()形式来
指定访问父类重的构造函数
当然子类中的构造函数第一行也可以手动指定this语句来访问 本类中德构造函数 子类中至少有一个构造函数会访问父类中德构造函数
***继承打破了封装性
final:
最为一个修饰符
- 可以修饰类 变量 函数。。
- 被final修饰的类不可以被继承 为了被继承 被子类复写功能将class给final
- 被final修饰的方法 不可以被复写 这个表示该类可以被继承 不过里面有几个方法是不能被复写的
- 被final修饰的变量是一个常量 只能赋值一次 即可以修饰成员变量 也可以修饰局部变量
- 内部类定义在类中的局部变量时 只能访问该局部被final修饰的变量
注意: 当描述事物时 一些数据的出现值是固定的 那么这时为了增强阅读性 都给这些值娶个名字方便阅读
而这个值不需要改变 所以加个final修饰 作为常量 命名所有字母大写 单词间通过下划线链接
抽象:看不懂。
特点:
抽象方法一定定义在抽象类中
抽象方法和抽象类都必须被abstract关键字修饰
抽象类不可以被 new 创建对象 因为调用抽象方法没意思
抽象类中的抽象方法要被使用必须由子类复写其所有的抽象方法后建立子类对象调用 如果子类只覆盖了部分抽象方法 那该子类还是一个抽象类
当多个类中出现了相同功能但功能主体不同 这时可以进行向上抽取 这时 只抽取功能定义 不抽取功能主体
抽象方法必须是抽象类里的
抽象类和一般类没有什么太大不同
该如何描述事物 就如何描述事物 只不过 该事物出现了一些看不懂的东西
这些不确定的部分 也是该事物的功能 需要明确出现 但是无法定义主体
通过抽象方法来表示
抽象类比一版类多了个抽象函数 抽象类中也可以不定义抽象方法
抽象类不可以实例化
特殊: 抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象
接口:
当抽象类中全是抽象方法 那么该类可以通过接口的形式来表示
class用于定义类
interface用于定义接口
接口在定义时
- 接口中常见定义:常量 抽象方法
- 接口中的成员都有固定修饰符 常量:public static final 方法:public abstract
- 接口不能创建对象 用implements来实现接口 需要 子类对接口的抽象方法全部覆盖后 子类才可以实例化
继承类 父类中有非抽象内容可以直接拿过来用
接口 全是抽象属性 函数 子类必须将接口方法全部实现
接口中的成员都是public的
接口可以被类多实现 一个类可以同时实现多个接口 也是对多继承不支持的转换形式 多实现用,分割
接口没有方法主体 有子类实现定义
一个类 在继承父类的同时 还能实现接口
类与类是继承
类与接口是实现
接口与接口是继承关系
*******接口之间存在着多继承 继承多个接口含有相同函数名不同返回类型的 就会出错哦
接口的特点:
- 接口是对外暴露的规则
- 接口是程序的功能扩展
- 接口是可以用来多实现
- 类与接口之间是实现关系 而且类可以继承一个类的同时显示多个接口
- 接口与接口之间可以有过继承关系
多态 :可以理解为事物的多种体现形态 (男人 女人)
- 多态的前提 必须是类与类之间有关系 要么继承 要么实现 存在覆盖
- 多态的体现 父类的引用指向了自己的子类对象
- 多态的好处 大大的提高了程序的扩展性
- 多态的应用
向上转型 Animal cat=new Cat();
如果想调用cat的特有方法时 要强制将父类的引用转成子类的类型
Cat c=(Cat) cat; c就可以执行Cat里的特有方法 向下强转
千万不要将 父类对象转成子类对象
我们能转的是父类引用指向了自己的子类对象时 该引用可以被提升 也可以被强转城子类对象
向上 向下
多态自始自终都是子类对象在做变换 子类--〉父类 --〉子类
’
建立父类的引用 (形参) 方法体重向下(强转)转型成相应的对象调用方法
new 的那个对象执行那个对象的方法 要是转换类型没有调用方法 报错找不到方法
]在多态中非静态成员函数的特点:
- 再编译时期 参阅引用类型变量所属的类中是否有调用的方法 如果有编译通过 否则失败
- 在运行时期 参阅所属的类中的是否有调用的方法
- 简单总结就是: 成员函数在多态编译的时候看左边 运行看右边 子类有用子类的 子类有父类没有报错
面试:
在多态中,成员变量的特点
多态中子类父类有重名变量无论编译和运行 都参考左边(引用类型的类)---父类
在多态中 静态成员函数的特点: 无论编译和运行都参考左边
接口 主板例子
多态 毕老师例子
object :是所有对象的直接或者间接父类 床说中的上帝
该类定义的可定是所有对象都具备的功能
内部类
- 访问规则:直接访问外部类成员包括私有 不需要实例化直接访问
- 外部类访问内部类 必须要建立内部类对象
- 之所以可以直接访问外部类中的成员是因为内部类中持有了一个外部类的引用 -----〉外部类.this
- 当内部类定义在外部类的成员位置上 而且非私有 可以在外部其他类中可以直接建立内部类对象 外部类.内部类 变量名=外部类对象.内部类对象
- 当内部类在成员位置上 就可以被成员修饰符所修饰
- 比如 private 将内部类在外部类中进行封装
- static : 内部类就具备了static特性
- 当内部类被static修饰只能直接访问外部类中的static成员了 出现访问局限
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看: