Java笔记(二)

mac2024-03-23  28

局部变量和成员变量的区别:

1.定义的位置不一样

局部变量定义在方法中,成员变量定义在方法外面,类的里面.

2.作用域不同

局部变量的作用域就是所定义的大括号,成员变量的作用域:在整个类中都可以使用,并且,成员变量的作用域跟变量修饰符有关,如果修饰符不是private,在其他的类中也可以使用

3.在内存中的位置不一样

局部变量存在于栈中,会随着作用域的结束而消失,成员变量存在堆中,是和对象的生命周期相同

4.初始化不同

局部变量在使用之前一定要手动进行初始化,而成员变量,如果没有进行手动初始化,java就会给他一个默认值,整数类型:0,long:0L,小数类型:0.0

 

静态方法会先于非静态的变量生成,所以静态方法不能使用非静态的成员变量

有类的时候不一定有对象,有对象的时候一定有类,所以非静态(方法)可以访问静态的(方法和变量),反之不行.

静态的属于类,非静态的属于对象

 

对象和对象之间的关系:

继承(泛化)

耦合性强

依赖

关系较弱,具有偶然性(人可能要过河,但不是每天都要)

在java中的体现

一个类是另一个类的方法的参数

关联

你和你的朋友,可以是单向也可以是双向

在java中的体现

一个类是另个一类的成员变量

聚合

是一种特殊的关联关系

在java中的体现

一个类是另个一类的成员变量

组合

在java中的体现

一个类是另个一类的成员变量

实现

 

依赖->(关联->聚合->组合)->继承

类和类之间的关系要越弱越好,高内聚低耦合.

 

为什么子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限

重写也叫覆写,修饰符、返回类型、参数就是要和父类一摸一样才叫覆写,意思是说各个地方都需要完美的盖住,在面向接口编程中,重写是子类有自己的逻辑要实现,同时又不破坏已写好程序逻辑的好方法======================================================举个例子,在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义

我的理解:继承是为了让同一个函数,做不同的事情,是扩展函数的用法.若子类中访问修饰符的范围小于父类,就违背了这个思想.

 

重写与重载的区别

java中会根据方法签名来调用方法.如果在当前类中找不到,则会沿着父类一级一级向上查找

重写是发生在父类子类之间,子类重写父类的方法,返回值一定和父类的返回值相同

方法的重载发生在同一个类中,方法名相同,参数列表不相同,返回值类型不作为判断的标准

 

代码块

构造方法代码块:

只有在创建对象之前调用一次

构造方法的执行顺序:和变量的声明的执行优先级相同

1创建对象空间

2给成员变量进行默认初始化

3显示赋值

静态代码块:第一次加载该类的.class文件时

局部代码块:写在方法中的代码块,为了限制,变量的作用范围

 

final:

final关键字可以修饰类,方法和变量

用final修饰的类不能被继承,用final修饰的方法不能被重写(但是可以继承)

用final修饰的变量,当第一次赋值后,不能被改变,也就是常量,

Final修饰的成员变量一定要在构造方法执行之前赋值,

局部变量要在使用之前赋值,因为java不会给局部变量设置初始值

Final修饰的形参不能修改

多态:同一个变量调用同一个方法,执行代码可能不同

多态的好处:提高了程序的扩展性

开闭原则

      对扩展开放,对修改关闭

      对类的设计,我们面向的父类,调用的时候,传入的是子类

多态的前提:

必须有继承必须有重写父类引用指向子类对象

多态的原理:在java中变量有两种类型,一个叫编译时类型,一个叫做运行时类型,

当一个变量的编译时类型和运行时类型不会相同时,就会产生多态

编译时类型是声明该变量的数据类型,运行时的类型是传入的对象的数据类型

 

Abstract

如果一个方法没有方法体,则该方法是一个抽象方法,要用abstract关键字进行修饰,如果一个类中有抽象方法,则该类叫做抽象类,也要用abstract修饰

抽象类不能创建对象,抽象类就是用来给子类继承的

如果一个类继承的是有抽象方法的抽象类,则有两种情况

1:子类不重写父类的抽象方法,则子类也是一个抽象类

2:子类重写父类的抽象方法

抽象类中不一定有抽象方法,只要这个类用abstract修饰

 

Interface接口

接口中的方法全部是抽象方法,接口中不能有具体的方法(就是有方法体的方法)

在接口中方法的默认修饰符是 public abstract

在接口中没有变量只有常量,变量的默认修饰符是public static final

Java中只支持单继承,但是可以实现继承的传递

在Java中一个类可以实现多个接口

接口和抽象类的区别:

1:创建的关键字不同,接口用interface,抽象类用class

2:接口中全部为抽象方法,抽象类中可以有非抽象方法

3:抽象类中可以定义普通成员变量,接口中只能定义静态的常量

4:一个子类只能继承一个抽象类,一个子类可以实现多个接口

5:从语义上来说,继承是is-a关系,实现是like-a

 

Java中的修饰符

Public公共的,任何类都可以进行访问

Protected受保护的(父类访问修饰符)

Private

默认(default):包访问受限

 

修饰类只能用默认或者public

 

如何创建一个内部类的实例

public class Outter{ Public class Inner{ Publicb void test(){ System.out.println(“test”); } } } Public ststic void main (String[] args){ Outter outter = new Outter(); Inner inner = Outter.new Inner(); inner.test();

 

 

 

 

最新回复(0)