属性
一 变量的分类
安照类型 分类: 基本数据类型 vs 引用数据类型
安照位置分类 : 局部变量 vs 成员变量(属性)
二 局部变量和成员变量的相同和不同
2.1相同点 :
1.都是先声明后使用
2.声明的格式都是一样的
3.都作用域
2.2不同点:
位置:
局部变量:在方法中,方法的形参,构造器中,构造器的形参代码块中都是局部变量
成员变量:在类中方法等结构外。
权限修饰符:
局部变量:不能使用权限修饰符
成员变量:可以使用四种权限修饰符 - private 缺省的 protected public
默认值:
局部变量:没有默认值
成员变量:和一维数组元素的默认值一样
内存:
局部变量:在栈中
成员变量:在堆中(堆中的创建的对象中)
属性赋值的方式 :
1.默认值 2.显示赋值 3.构造器赋值 4.对象名.属性名、对象名.方法名
属性赋值的顺序 :
1 -> 2 -> 3 -> 4
方法
一 方法的格式:
权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
二 方法的说明:
1.权限修饰符 :private 缺省的 protected public (先使用public即可)
2.返回值类型 :void(没返回值) / 具体的返回值的类型(基本数据类型/引用数据类型
如果方法是返回值的,那么在方法体中必须使用(return 返回的数据
3.方法名 :只需要遵守标识符的规则和规范即可。xxxYyyZzz
4.形参列表 :可以是0个1个或多个。(如果需要调用者必须传参数时就需要形参列表)
5.方法体 :方法功能的具体实现 (只调用方法的时候才会执行方法体
三 说明:
思考 :定义一个方法时需要思考 ?1.该方法需不需要返回值 2.该方法需不需要形参
思考:需不需要返回值?如果需要方法的返回值去做其它运算那么就必须返回数据。
思考 :该方法需不需要形参?就看需不需要方法的调用者传递数据
四 方法的四种形式:
1.无返回值无参
2.无返回值参
3.返回值无参
4.返回值参
可变形参
一 使用说明
格式 :
变量的类型 ... 变量名
说明:
1.可变形参的个数可以是0个1个或多个
2.和可变形参相同类型的数组不构成重载(可变形参其实就是数组)
3.可变形参只能放在形参列表的最后一个。
4.在一个形参列表中最多只能有一个可变形参
二 举例说明
public void add(int ... numbers){
int sum = 0;
for(int i = 0; i < numbers.length; i++){
sum += numbers[i];
}
}
方法的重载
1.方法的重载的概念: 同一个类中相同的方法名不同的形参列表构成重载
两同一不同:同一个类,同一个方法名,不同的形参列表
不同的形参列表 :形参的个数,类型,顺序不同。
2.如何确定类中某一个方法的调用:方法名 + 形参列表
3.注意 : 方法的重载和权限修饰符,返回值类型,形参的名字无关。
4.举例:
public void add(int a,int b){}
public void add(double a,double b){}
构造器
一 作用:
1.创建对象 2.对对象进行初始化
二 格式:
权限修饰符 类名(形参列表){
执行语句;
}
三 说明:
1.如果在类中没显示的提供构造器,那么系统会默认提供一个空参的构造器。
那么我们创建对象时调用的就是这个默认空参构造器。
2.如果在类中显示的提供了构造器,那么系统将不再提供默认的空参构造器。
3.构造器可以多个,彼此之间构成重载
四 总结 : 只要创建对象必调构造器
五 思考?通过构造器给属性赋值的特点?
只能赋值一次
六 思考?即然构造器可以给属性赋值还有必要提供方法进行赋值吗?
有必要,因为后面可能需要对对象中的属性进行修改,再通过构造器修改属性值是不可能的。
七 思考:什么场景下需要使用构造器?
1.创建对象 2.一个对象中只执行一次的代码可以放在构造器中
八 代码
public class Person{
public Person(){
}
}
内部类
内部类 : 在一个类A的内部再定义一个类B,类A叫作外部类,类B叫作内部类
内部类 : 成员内部类 vs 局部内部类
成员内部类 : 静态(成员)内部类 vs 非静态(成员)内部类
内部类:
作为类:
1.可以继承父类,实现接口
2.类内部可以有类的成员(普通类可以做的事情内部类都可以)。
作为类的成员:
1.可以被static修饰
2.可以使用四种权限修饰符
3.内部类还可以调用外部类的成员(属性,方法)
学习目标:
-
如何创建内部类的对象?
静态内部类:new 外部类名.内部类名()
非静态内部类 :外部类的对象.new 内部类名()
-
内部类如何调用外部类的成员(属性和方法)?
静态内部类 :外部类名.类变量名、静态方法 (只能调用外部类的类变量和静态方法) 非静态内部类 : 外部类名.this.属性名、方法名
-
如何使用局部内部类?
-
匿名内部类
匿名内部类的特点:
1.匿名内部类必须继承父类或实现接口
2.匿名内部类只能有一个对象
3.匿名内部类对象只能使用多态形式引用
4.只用一次的类就用匿名内部类(自我阐述)
注意:
1.内部类只能调用属性和方法,不能修改。
2.内部类和外部类可以有同名的方法,互不干扰
3 .内部类和外部类的区别:内部类可以用四种修饰符修饰
外部类只能是public和缺省的修饰
外部类不能被static修饰,修饰了就没意义了
5. 静态内部类和外部类一样只能调用静态方法
匿名内部类
格式:
父类、接口的类型 对象名 = new 接口名、抽象类名、类名 (){
//重写的方法
}
例:
interface USB{
void start();
}
USB usb = new USB(){
public void start(){
}
};
匿名内部类的特点
1.匿名内部类必须继承父类或实现接口
2.匿名内部类只能一个对象
3.匿名内部类对象只能使用多态形式引用
代码块
一 代码块的作用:用来对类或对象进行初始化
二 分类:静态代码块 vs 非静态代码块
1.格式:
非静态代码块: {}
静态代码块 :static{}
2.注意:代码块只能被static修饰
三 说明:
静态代码块:
1.静态代码块是随着类的加载而加载的。(类加载只加载一次)
2.类加载优先于对象的创建。(静态代码块的执行优先于非静态代码块)
3.静态代码块可以多个,多个静态代码块之间是从上向下依次执行
4.静态代码块 : 不能调用实例变量和非静态方法
5.对Java类进行初始化
非静态代码块
1.非静态代码块是随着对象的创建而加载的
2.非静态代码块的执行优先于构造器
3.非静态代码块可以多个,多个非静态代码块之间是从上向下依次执行
4.非静态代码块 : 可以调用静态方法和类变量
5.对Java对象进行初始化
四 代码:
public class Computer{
{
//创建对象时一定要调用的代码放在非静态代码块
}
static{
//随着类的加载调用。只要是在类加载时执行的代码那么就放在静态代码块中
}
}