static 修饰方法 (静态的成员方法):
访问方式:
可以使用对象进行访问 对象. 静态函数名 ();
可以使用类名进行访问 类名. 静态函数名 ();
静态函数要注意的事项:
静态函数是可以使用类名或者对象进行调用的, 而非静态函数只能使用对象进行调用
静态的函数可以直接访问静态的成员 (函数与变量), 但是不能直接访问非静态的成员. 原因: 静态函数是可以使用类名直接调用的, 这时候可能还没有存在对象, 而非静态的成员数据是随着对象的存在而存在的.
非静态的函数是可以直接访问静态与非静态的成员 原因: 非静态函数只能由对象调用, 当对象存在的时候, 静态数据老早就存在了, 而非静态数据也随着对象的创建而存在了.
静态函数不能出现 this 或者 super 关键字 原因: 因为静态的函数是可以使用类名调用的, 一旦使用类名调用, 这时候不存在对象, 而 this 关键字是代表了一个函数的调用者对象, 这时候产生了冲突.
推荐使用类名直接访问静态的成员 (节省内存 简便)
静态的数据的生命周期: 静态的成员变量数据是优先于对象存在的.
静态代码块是在类. calss 文件加载到内存的时候就马上执行的.
static 什么时候修饰一个函数呢? 答: 如果一个函数没有直接访问到非静态的成员时, 那么就可以使用 static 修饰了. 一般用于工具类型的方法
静态函数不能访问非静态的成员? 不正确 (不能直接访问) 静态函数只要存在有对象, 那么也可以访问非静态的数据. 只是不能直接访问而已.
静态的成员变量与非静态的成员变量的区别:
作用上的区别:
静态的成员变量共享一个数据给所有对象使用.
非静态的成员变量的作用是描述一类事物的公共属性
数量与存储位置上的区别:
静态成员变量是存储方法区内存中, 而且只会存在一份数据
非静态的成员变量是存储在堆内存中, 有 n 个对象就有 n 份数据
生命周期的区别:
静态的成员变量数据是随着类的加载而存在, 随着类文件的消失而消失.
非静态的成员数据是随着对象的创建而存在, 随着对象被垃圾回收器回收而消失.
main 函数的详解:
public 原因: 为了保证让 jvm 在任何情况下都可以访问到 main 方法
static (静态) 静态可以让 jvm 调用 main 函数的时候更加的方便. 不需要通过对象调用.
不使用 static 修饰的麻烦:
需要创建对象调用
jvm 不知道如何创建对象, 因为创建对象有些是需要参数的, 参数传递什么东西呢?
void 没有返回值 因为返回的数据是给 jvm. 而 jvm 使用这个数据是没有意义的, 因为返回的时候意味这 main 函数结束了, 所以这个数据也没用了. 所以就不要了.
main 函数名. 注意: main 并不是关键字, 只不过是 jvm 能识别的一个特殊的函数名而已.
arguments 参数 担心某些程序在启动时需要参数.
单例设计模式: 保证一个类在内存中只有一个对象
模式: 模式就是解决一类问题的固定步骤.
单例设计模式的步骤:(饿汉单例设计模式)
私有化构造函数
声明本类的引用类型变量, 并且使用该变量指向本类对象
提供一个公共静态的方法获取本类的对象
- public class SingleCreative {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Single1 s1=Single1.getInstance();
- Single1 s2=Single1.getInstance();
- System.out.println(s1==s2);
- }
- }
- class Single1{
- private static Single1 s=new Single1();
- private Single1() {}
- public static Single1 getInstance() {
- return s;
- }
- }
懒汉单例设计模式:
私有化构造函数
声明本类的引用类型变量, 但是不要创建对象
提供公共静态的方法获取本类的对象, 获取之前先判断是否已经创建了本类的对象, 如果已经创建了, 那么直接返回对象即可, 如果还没有创建, 那么先创建本类的对象, 然后再返回
- public class Single {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Single2 s1=Single2.getInstance();
- Single2 s2=Single2.getInstance();
- System.out.println(s1==s2);
- }
- }
- class Single2{
- private static Single2 s;
- private Single2() {}
- public static Single2 getInstance() {
- if (s==null) {
- s=new Single2();
- }
- return s;
- }
推荐使用: 饿汉单例设计模式 (因为懒汉单例设计模式会存在线程安全问题 )
继承: 继承是通过关键字 extends 体现的 父类 (超类 基类) 子类
继承的格式:
class 类名 1 extends 类名 2{
}
继承要注意的事项:
千万不要为了减少重复代码而去继承, 只有真正存在着继承关系的时候才去继承.
父类私有的成员不能被继承.
父类的构造函数不能被继承.
创建子类对象时默认会先调用父类无参的构造函数.
为什么要调用父类的构造方法呢? 这样子做的意义在哪儿?
调用父类的构造方法是可以初始化从父类继承下去的属性的.
super 关键字: super 关键字代表了父类空间的引用.
super 关键字的作用:
子父类存在着同名的成员时, 在子类中默认时访问子类的成员, 可以通过 super 关键字指定访问父类的成员
创建子类对象时, 默认会先调用父类无参的构造方法, 可以通过 super 关键字指定调用父类的构造方法
- public class Demo1 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Zi z=new Zi("狗娃","铁蛋");
- z.print();
- }
- }
- class Fu{
- int x=10;
- String Name;
- public Fu() {}
- public Fu(String name) {
- this.Name=name;
- }
- public void eat() {
- System.out.println("小头爸爸吃番薯");
- }
- }
- class Zi extends Fu{
- int x=20;
- String name;
- public Zi(String name,String Name) {
- this.name=name;
- super.Name=Name;
- }
- public void print() {
- super.eat();
- eat();
- System.out.println("名字 =:"+super.Name);
- }
- public void eat() {
- System.out.println("大头儿子吃龙虾");
- }
- }
super 关键字调用父类构造方法要注意的事项:
如果在子类的构造方法上没有指定调用父类的构造方法, 那么 java 编译器会在子类的构造方法上面加上 super() 语句.
super 关键字调用父类的构造函数时, 该语句必须要是子类构造函数中的第一个语句.
super 和 this 关键字不能同时出现在同一个构造函数中调用其他的构造函数. 因为两个语句都需要在第一位.
super 关键字和 this 关键字的区别:
代表的事物不一致
super 关键字代表的是父类空间的引用 (代表一块内存空间)
this 关键字代表的是所属函数的调用者对象
使用前提不一样
super 关键字必须要有继承关系才能使用
this 关键字不需要存在继承关系也可使用
调用构造函数的区别
super 关键字是调用父类的构造函数
this 关键字是调用本类的构造函数
方法的重写: 子父类出现了同名的函数, 这个我们就称为方法的重写 (父类的功能无法满足子类的需求时)
方法重写的前提: 必须要存在继承的关系.
方法重写要注意的事项:
方法重写时, 方法名与形参列表必须一致.
方法重写时, 子类的权限修饰符必须要大于或者等于父类的权限修饰符. (public 的权限比不写的要大一点儿)
方法重写时, 子类的返回值类型必须要小于或者等于父类的返回值类型.
方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型. Exception (最坏) RuntimeException(小坏)
instanceof 关键字:
instanceof 的作用: 判断一个对象是否属于指定的类别.
instanceof 的使用前提: 判断的对象与指定的类别 i 必须要存在继承或者实现的关系. (可以对象是子类 也可以对象是父类 判断的类别是它的子类)
instanceof 关键字的使用格式: 对象 instanceof 类别 (是 返回 true 不是 返回 false)
来源: http://www.bubuko.com/infodetail-2933999.html