LENOVO-PC_刘甲波12.9

包是管理类和接口的,还可以解决命名冲突,类和接口需要定义在包中。

包=目录

类=文件

包:package

包的定义

定义包的语法格式如下:

package 包名;

定义包必须是java原文件的第一行代码

包名必须小写

使用package关键字定义包

例如:

package cn.itlaobing.oop

包的使用

使用包就是将包中的类导入到使用的地方。

使用import关键字导包

例如:

import java.util.Arrays;

import java.util.Scanner;

import java.util.*;

系统包

java.lang.*;此包的类默认都是导入了。例如:String,System,Math

java.util.*工具包。Scanner,Random,Arrays

java.io.*输入输出。File, FileInputStream

java.text.*国际化程序支持包。SippleDateFormat

关键字

static的使用

static翻译成静态

static可以修饰内部类,属性和方法,定义静态块。

static修饰的属性称为静态属性或类变量,没有用static修饰的属性称为实例变量。使用static修饰的属性属于类不属于对象,类属性在类名首次出现时初始化,即使没有创建对象,类属性也是出现的。

static和instances(实例)的区别

(1)静态成员和实例成员分配内存的时机

​ 静态成员在类名首次 出现时,最先分配内存的,静态属性分配在方法去中。然后调用静态块,如果有多个静态块,那么则按照从上到下的顺序执行。

实例成员是在实例化时分配内存的,如果没有实例化对象则实例成员就不分配内存。

(2)静态成员和实例成员分配内存的次数

​ 静态成员只分配一次内存,因此静态成员只有一份。

​ 实例成员分配内存的次数由实例化的次数决定,每实例化一次就分配一次内存。

(3)静态成员和实例成员的调用 规则

​ 静态成员由类名直接调用,也可以由对象名调用,但不推荐使用对象名来调用。

​ 实例成员由对象名调用,不能使用类名调用。

这种调用规则是因为:

​ 静态属于类成员,因此静态成员也称为类成员(类变量,类方法)

​ 实例属性属于对象成员

(4)静态块的作用

实例属性可以通过构造函数初始化。

静态属性也可以通过静态块进行初始化,因此类名首次出现时就给静态变量分配内存,然后就调用静态块。

java中的常量

值不可以改变的变量称为常量

使用static final修饰的变量是类常量

使用final修饰的变量称为实例常量

final是java的关键字,翻译为最终。final可以修饰类,属性,方法。修饰类时类不能被继承,修饰属性时不能改值,修饰方法时不能被子类重写。

继承

继承的基本概念

继承是面向对象的三大特征之一。

extends是继承的关键字。

继承可以解决程序中代码冗余的问题,是实现代码复用的重要手段之一。

继承的语法规则如下:

[访问修饰符] class 子类名 extends 父类名{

子类成员变量

子类成员方法

}

子类继承符类后,子类就继承父类中的成员,导致子类无需从新创建,简化了子类的设计。

super与this关键字

super表示父类

this表示子类

super调用父类的构造方法:super(参数);

例如:

public PersonnelDept(String name, String responsibility, String manager,int count) {

super(name,responsibility,manager);

this.count = count;

}

super调用父类构造方法时,必须写在子类构造函数的第一行。

super只能在子类中,而不是其他位置。super是用于访问符类成员的。

super调用父类的方法:

例如

public String toString() {

return super.toString()+"count="+ count;

}

继承中对象的实例化的顺序问题

class A{

int a;

public A(int a) {

this.a = a;

}

}

class B extends A{

int b;

public B(int a,int b) {

super(a);

this.b = b;

}

}

class C extends B{

int c;

public C(int a,int b,int c) {

super(a,b);

this.c = c;

}

}

public class D {

public static void main(String[] args) {

​ C c = new C(1, 2, 3);

​ c.a= 1;

}

}

问题:main方法中创建对象c时,jvm到底创建了多少个对象?

答:当 实例化一个对象时,该对象的所有父类也都被实例化了。

问题:这些被实例化的对象实例化的顺序是什么?

答:实例化的顺序是从父类到子类。

问题:继承中构造函数的顺序是?

答:从子类到父类调用

问题:继承中构造数的 执行顺序是?

答:从父类到子类

评论