代码先锋网 代码片段及技术文章聚合

大数据预科班8

大数据预科班8

复习

  • 面向对象的特征:封装、继承、多态
  • 封装--体现形式:函数、属性私有化----复用性、安全性
  • 继承--extends,支持单继承---复用性、安全性、结构
  • 多态--重载、向上造型、重写(两等两小一等)
  • 权限修饰符:public、protected、默认、private;使用范围,从什么时候开始
  • super--在子类代表父类对象的引用,可以通过super来调用父类中的方法和属性;super语句,子类的每个构造函数会直接或间接有super语句,所以在创建子类时先会创建父类。

Static

  • 可修饰:变量、方法、代码块、内部类
  • 静态变量

static String hobby;

这个变量称为静态变量或类变量,类加载时在方法区中的静态区并赋予初值,由于静态变量是先于对象而存在的,
可以通过对象来调用,也可通过类名直接调用,
由于该类创建的所有对象存储的是静态属性在静态区中的地址值,所有静态属性是被所有对象所共享的。

静态属性尽量少用--共享导致不安全
1.静态变量可以定义在方法中吗? --不可以,静态变量是在类加载的时候加载并初始化,方法随类加载而加载到方法区,但没有执行,在方法被调用的时候执行
2.可以在构造函数中定义静态变量吗? --不可以,因为构造函数在创建对象时才被调用
3.可以在构造代码块中初始化静态变量吗 --可以(静态先加载,构造代码块后执行)
4.this调静态变量? --可以

静态方法

  • static可以修饰方法称之为静态方法或者类方法。随着类的加载而加载到方法区的静态区--只是存储在静态区
  • 静态区的元素不归属与某个对象,而是归属于类;静态方法属于类;比对象先存在
  • 例子:System.arraycopy();Arrays.toString();

1.System.out.println();不是静态方法//out是对象
2.静态方法中可以定义静态变量吗?--不可以,静态方法加载到静态区只是存储在静态区,并没有执行,被调用到时才会到栈内存才执行,方法执行才分配空间。
3.静态方法可以直接调用本类中的非静态方法吗?--不行(非静态方法和属性通过对象来调用,静态的先于对象存在)
4.主函数可以使用this吗?--不可以(static方法中不能用this)
5.静态函数可以重载吗?--可以(重载:方法名一致,参数不一致,不要求修饰符和返回值)
6.静态方法可以重写吗?--不可以(验证:@Overrid 上造型调用)
7.父子类可以存在方法签名完全一致的静态方法吗?--可以
8.父子类存在方法签名一致的时候,要么两者都是静态要么两者都是非静态。
- 重写和重载--多态针对的是对象,从对象的层面来看的;静态是从类层面来看的 - 多态针对的是方法而言的

静态代码块

class Demo{
    static{

    }
}
  • 在类内用static{}圈住的代码
  • 类加载的时候执行,且只执行一次
  • 实际上静态代码块是随着类的加载而加载到静态区,在类创建对象获得执行方法执行一次
  • 终其一生只执行一次
  • 本类执行顺序(静态代码块-》构造代码块-》构造函数)
  • 父子类执行顺序()

**静态优于对象而存在**
**父类优于子类而存在**
1. 创建子类前,先创建父类
2. 加载父类
3. 执行父类静态代码块
4. 执行子类静态代码块
5. 父类构造代码块
6. 父类的构造方法
7. 子类构造代码块
8. 子类构造方法

代码块与变量的定义上下位置:标记

例1:
    int i=5;
    {
        i=6;
    }
    结果i=6

例2: 
    {
        i=3;
    }
    int i=1;
    编译不报错,执行结果为i=1

例3:
    {
        i=1;
        i+=1;
    }
    int i=1;
    编译报错

final

  • 修饰变量,表示这个变量的值不可更改--常量
  • final修饰的值

package com.peng.demo;

public class DE1 {
    final int i;
}
编译出错


package com.peng.demo;

public class DE1 {
    final int i;
    {
        i = 9;
    }
}
编译通过
  • 在java中说的常量往往指的是静态常量(length、in、out,NaN非数字)
  • 注:函数调用时参数的性质可能会变
  • 对于基本类型来说,不可变;对于引用数据来说,地址不可变,数据可能变了。
  • 修饰函数--表示此方法为最终方法(该方法不能被重写,可以重载)
  • 静态方法可以用final修饰
  • final修饰类,表示这是一个最终类--这个类不能被继承(eg:String类,System类)

抽象类

  • 将一些名称一致,细节不同的行为提取到父类中定义为抽象方法,抽象方法所在的类就是抽象类
  • 抽象类不能创建对象,并且子类继承它必须实现其抽象函数,或者也定义为一个抽象类
  • 任何一个类都有构造函数,不管能不能创建对象
  • 抽象类中一定有抽象函数吗? 不一定
  • 抽象类可以有静态函数
  • 抽象类中可以定义普通方法
  • 把类中的公共方法提取,并且不用写方法体
  • 不能直接创建对象(可以使用匿名内部类【类】)

abstract class Pet{
    abstract void eat();
}
class Dog extends Pet{
    void eat(){

    }
}
  • 具体的类继承抽象类时,必须实现抽象类中的抽象方法,否则声明成抽象类
  • 抽象类与普通类区别:抽象类可以有抽象方法;抽象类不能创建对象。
  • 抽象方法可以和普通方法重载
  • 抽象方法不可用static修饰--因为静态方法不能被重写,抽象方法必然被重写
  • 抽象方法不能用final修饰
  • 抽象方法可以用默认修饰吗?--可以
  • 抽象方法可以用private修饰?--不可用

子类继承不到父类的

  • private属性、方法
  • 构造方法
  • 代码块(连名字都没有,哈哈)

接口

  • 所有方法都是抽象方法
  • interface声明一个接口
  • 规范作用(理解为模板)

interface a{
    public static final int PI=3.14;

    public abstract void add(int a):
}
  • 通过implements让类与接口产生联系,然后重写抽象方法
  • 接口不能创建对象--接口的多态(向上造型)
  • 接口中没有构造函数(interface cannot constructs)
  • 接口不是类
  • 接口能定义属性public static final 类型 变量 =值;
  • 接口定义的方法public abstract,不可以用其他来修饰

java支持单继承,多实现(用,隔开),但是有冲突

package com.peng.demo;

public class DE1 implements a, b {
    /*冲突
    @Override
    public int a() {
        return 0;
    }
    */
}

interface a {
    int a();
}

interface b {
    String a();
} 
  • 接口和接口可以继承,而且还是多继承(接口中的方法为抽象方法,没有方法体)
版权声明:本文为eieiei438原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/eieiei438/article/details/77951786

智能推荐

大数据预科班作业13

大数据预科班作业13 1. (File 类)以下关于 File 类说法正确的是: 2. (File 类)有如下代码: 3. (File 类)将下列代码补充完整 4. (流的分类) 5. (字节流, FileInputStream) 6. (FileInputStream)下面关于 FileInputStream 类型说法正确的是: 7. (FileOutputStream)填空: 8. 代码改错 ...

大数据预科班18

大数据预科班18 序列化与反序列化流 将一个对象进行完整保存的过程--序列化--持久化 序列化是持久化的一种方式 反序列化--将对象完整还原回来 注意事项--类实现序列化接口,标记该类的对象可以序列化 Serializable--没有属性和方法,只是标记类可以被序列化 静态属性用static修饰,那么该属性不会被序列化出去--没有必要序列化出去(类加载的时候static就存在了) 反序列化 tra...

大数据预科班5

大数据预科班第五天 复习 数组:定义好长度不可变、类型不可变 二维数组:二维数组中的每一个元素都是一维数组 定义格式:数据类型[][] 数组名=new 数据类型[二维数组的长度(或者称为包含一维数组的个数)][每一个一维数组的长度]; 获取具体的数据需要两个下标; 第一的[]的值必须有,第二个可有可无;写第二个参数注意使用时必须初始化再使用,否则将报NullPointExeception; []放...

大数据预科班4

大数据预科班第四天 复习 判断语句(if、if-else、if-else-if) 选择结构(switch-case) 循环结构(while、do-while、for 如果循环体只有一句,可以省略{},do-while必须有{}) 数组 本质:一组数的容器,数组对每一个存入的数字都会自动编号,编号从0开始–即下标 数组定义格式:数据类型[] 变量名=new 数据类型[数组大小或者元素的个...

大数据预科班6

大数据预科班第六天 复习 二维数组:数组的数组,每一个元素是一个二维数组。 函数:传参,对于基本类型传递的是实际值;对于引用数据类型,传递的是地址 函数重载:函数名一致,参数不一致 函数的递归:函数自己调用自己,当递归次数比较多的时候,会出现栈溢出错误:StackOverFlowError 面向对象 万物皆对象 通过对抽取出共同的属性和方法,抽象成一个类。 通过new关键字来创建对应类的一个实例(...

猜你喜欢

大数据预科班作业7

大数据预科班作业7 1. (继承、this 和super 关键字)有以下代码 Super() Sub() Super() Sub() Sub(int) Super(String) Sub(String) 2. (super)看下面代码,写出程序运行的结果 m1() in Sub m1() in Super m2() in Super 3. (多态)有如下代码 编译不通过 4. (多态)有如下代码:...

大数据预科班7

大数据预科班7 复习 1. 类与对象的关系:类是对象的概括,对象是类的具体化 2. 成员变量和局部变量:定义位置、作用域、存储位置、生命周期 3. 构造函数:与类名相同,而返回值类型(注:“类型”),可以重载--创建对象,初始化属性;任何一个类中都有构造函数 4.this关键字--代表当前对象的引用 5. this语句--用于在本类的构造函数中调用其他构造函数this放首行...

大数据预科班作业9

大数据预科班作业9 1. (Object 类)在Object 类中,定义的finalize 方法在______时调用,toString()方法返回值表示,equals 方法的作用为,getClass 方法作用为__________ 2. (toString 方法,equals 方法)写出Object 类中toString 方法的签名,以及equals 方法的签名 3. (toString 方法)写...

大数据预科班串讲

串讲1 方法参数的传递 形式参数 基本类型(在栈里面存的)改变不影响实际参数(特殊的比如说:String) 引用类型(在堆里面存的)影响实际参数 注意引用数据类型中的String(方法区中有个字符串常量池) Debug视图 Debug管理界面 Variables变量界面 BreakPoints断点界面(记得清理断点) Expression View表达式界面 Console控制台 Display编...

大数据预科班11

大数据预科班11 复习 String--代表字符串,最终类;String是一个常量,不可被重写;String可以被共享;不同方式下,String对象的个数不同; String s =new String("a");//创建了两个对象 字符串不可变 indexOf返回指定字符串第一次出现的下标【从0开始】(string/int s,int fromIndex)从下标为fromIn...