1.属性
属性 = 成员变量 = field = 域、字段
类中属性的使用: 属性(成员变量) vs 局部变量 1.相同点:
1.1 定义变量的格式:数据类型 变量名 = 变量值 1.2 先声明,后使用 1.3 变量都有其对应的作用域
2.不同点:
2.1 在类中声明的位置的不同 属性:直接定义在类的一对{}内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 2.2 关于权限修饰符的不同 属性:可以在声明属性时,指明其权限,使用权限修饰符。 常用的权限修饰符:private、public、缺省、protected —>封装性 局部变量:不可以使用权限修饰符 2.3 默认初始化值的情况: 属性:类的属性,根据其类型,都有默认初始化值。 整型(byte、short、int、long):0 浮点型(float、double):0.0 字符型(char):0 (或’u0000’) 布尔型(boolean):false 引用数据类型(类、数组、接口):null 局部变量:没有默认初始化值。 意味着,我们在调用局部变量之前,一定要显式赋值。 特别地:形参在调用时,我们赋值即可 2.4 在内存中加载的位置: 属性:加载到堆空间中 (非static) 局部变量:加载到栈空间
2.方法
方法 = 成员方法 = 函数 = method
类中方法的声明和使用: 方法:描述类应该具有的功能。 比如:Math类:sqrt()random() … Scanner类:nextXxx() … Arrays类:sort() binarySearch() toString() equals() …
1.举例: public void eat(){} public void sleep(int hour){} public String getName(){} public String getNation(String nation){} 2. 方法的声明:权限修饰符 返回值类型 方法名(形参列表){ 方法体 } 3. 说明: 3.1 关于权限修饰符:默认方法的权限修饰符先都使用public 3.2 返回值类型: 有返回值 vs 没有返回值 3.3.1 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用 return关键字来返回指定类型的变量或常量:“return 数据”。 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方 法中,就不需要使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。 3.2.2 我们定义方法该不该有返回值? ① 题目要求 ② 凭经验:具体问题具体分析 3.4 方法名:属于标识符,遵循标识符的规则和规范,“见名知意。 3.5 形参列表: 方法可以声明0个,1个,或多个形参。 3.5.1 格式:数据类型1 形参1,数据类型2 形参2,… 3.5.2 我们定义方法时,该不该定义形参? ① 题目要求 ② 凭经验:具体问题具体分析 3.6 方法体:方法功能的体现。
3.构造器
1.构造器的作用:
1.创建对象 2.初始化对象的信息
2.说明:
1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器 2.定义构造器的格式:权限修饰符 类名(形参列表){} 3.一个类中定义的多个构造器,彼此构成重载 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器 5.一个类中,至少会有一个构造器。
4.代码块
- 代码块的作用:用来初始化类、对象
- 代码块如果有修饰的话,只能使用static.
- 分类:静态代码块 vs 非静态代码块
- 静态代码块
内部可以有输出语句 随着类的加载而执行,而且只执行一次 作用:初始化类的信息 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行 静态代码块的执行要优先于非静态代码块的执行 静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
- 非静态代码块
内部可以有输出语句 随着对象的创建而执行 每创建一个对象,就执行一次非静态代码块 作用:可以在创建对象时,对对象的属性等进行初始化 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的
5.内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。
1.成员内部类
(1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员); (2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员。如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量 或 外部类.this.成员方法】; (3)在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问; (4)成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象; (5)内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。如果成员内部类用private修饰,则只能在外部类的内部访问;如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。外部类只能被public和包访问两种权限修饰。 (6)类内可以定义属性、方法、构造器等 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承 可以被abstract修饰,可以被static修饰
2.局部内部类
(1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内; (2)局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
3.匿名内部类
(1)一般使用匿名内部类的方法来编写事件监听代码; (2)匿名内部类是不能有访问修饰符和static修饰符的; (3)匿名内部类是唯一一种没有构造器的类;
(4)匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
4.内部静态类
(1)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似; (2)不能使用外部类的非static成员变量或者方法。 (3)外部类加载时并不需要立即加载内部类
内部类与静态内部类的区别
静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。 但是可以直接访问静态变量,调用静态的方法。 普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。 如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。 如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个内部类的对象作为一个属性,外部类可以通过属性调用普通内部类的方法或者访问普通内部类的属性。 如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。 在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。