第六章
一.封装
1.为什么封装?好处?
封装之后,看不到这个事物复杂的一面,只看到简单的一面。(照相机复杂,但对使用照相机的人来说,操作简单方便)。
封装之后才会形成真正的“对象”,真正的“独立体”。
封装意味着以后的程序可以反复使用,并且适用性较强,任何场合都可以使用。
提高了安全性。
2.如何封装?
private int age;//属性私有化
public void setAge(int a){
age=a;//修改这个属性的值
}
public int getAge{
return age;//读取这个属性的值
}
//对外提供简单的操作入口,也就是外部程序想要访问age属性,必须通过这些简单的入口进行访问。
3.方法修饰符有无static关键字如何调用?
没有static关键字的方法,被称为实例方法(当一个行为/动作执行的过程当中是需要对象参与的,称之为实例方法,),实例方法怎么访问?“引用”
没有static关键字的变量,被称为实例变量,有static,称为静态变量(它们都是成员变量,在方法体外声明的)(知识整理4中的详解)
有:类名.方法名(实参);
无:引用.方法名(实参);
二.构造方法
1.什么是构造方法?
在类进行实例化对象时运行的一个特殊的方法
2.为什么使用构造方法?
使用构造方法是为了给对象的成员变量初始化(更加方便,没有构造方法的话赋值比较繁琐)
通过构造方法的调用,可以创建对象。
创建对象的同时,初始化实例变量的内存空间。(实例变量的内存空间是在构造方法执行过程中完成开辟的)
3.语法结构:
【修饰符列表】 构造方法名(形式参数列表){
构造方法体;
}
public Good(int a){//有参
a=5;
}
public Good(){//无参
}
4.与普通方法区别?
无返回值(void)且构造方法以类名一致。
4.如何调用?
方法修饰符有无static关键字:
有:类名.方法名(实参);
无:引用.方法名(实参);
5.构造方法调用执行后,有返回值吗?
由于构造方法不含返回值,所以“return”不需要编写。
6.当一个类没定义任何构造方法时,系统默认给该类提供一个无参的构造方法,称为缺省构造器。如果一个类编写了构造方法,那么就不会再默认生成构造方法了,(即可以只有一个有参构造方法)
7.构造方法支持重载机制,在一个类中可以编写多个构造方法。
三.对象和引用:
1.对象和引用的概念?
对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。
引用:是一个变量,不一定是局部变量,还可能是成员变量,引用保存了内存地址,指向了堆内存当中的对象。
所有访问实例相关的数据,都需要用“引用.”的方式访问,因为只有通过引用才能找到对象。
只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。
class student{
Computer com;//com是一个引用【实例变量】
public static void dosome{
Computer cc;//cc是一个引用【局部变量】
}
}
2.参数的传递?
java语言当中方法调用的时候涉及到参数传递的问题,实际上**传递的是变量中保存的具体值。**有的时候是传的一个字面值,有的时候传的是一个java对象的内存地址(引用的传递是传的内存地址)
四.关键字
1.this
1.1.this是一个引用,是一个变量,变量中保存了内存地址指向了自身,this存储在JVM堆内存java对象内部,每一个对象都有一个this
1.2 this出现在“实例方法”当中,代表当前正在执行这个动作的对象。(故有static关键字的方法不存在this)
1.3 this的妙用:
private int id;
public void SetId(int id){
id=id;//由于java的就近原则,右边的局部变量(形参)id与左边的实际变量无关
}
private int id;
public void SetId(int a){
id=a;//正确
}
//另外,还可以使用this
private int id;
public void SetId(int id){
this.id=id;//正确,左边的表示实际变量id,右边的表示局部变量(形参)id
}
//结论:this什么时候不能省略?用来区分局部变量和实例变量的时候,“this”不能省略。
2.static
1.关键字Static的作用?
static 关键字主要有两种作用:
第一,为某特定数据类型或对象分配单的存储空间,而与创建对象的个数无关。
第二,希望某个方法或属性与类而不是与对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。
具体而言,static在Java语言中主要有四种使用情况:静态变量、成员方法、代码块及内部类。
(1)static静态变量(类变量)
1.1.静态变量:static String con;//在类加载的时候初始化,内存在方法区开辟,不需要创建对象,内存就开辟了,它存储在方法区内存中。
1.2.什么时候成员变量声明为实例变量呢,什么时候声明为静态变量呢?
——所有对象都有这个属性,这个属性的值会随着对象的变化而变化【实例变量】
——这个属性的值是一样的,不会变化,建议定义为静态变量,节省内存的开销。【静态变量】
(2) static 成员方法
static 方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用。
static方法中不能使用this和super关键字,不能直接调用非static方法,只能访问所属类的静态成员变量和成员方法,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static 方法也不能访问非static类型的变量。实现了单例。
(3).Static代码块
(1).语法格式:
static{
java语句;
}
(2)在类中独立于成员变量和成员函数的代码块。它不在任何一个方法体内,JVM在加载类的时候执行静态代码块,多个存在则顺序执行,常用来初始化静态变量。而且只被执行一次,如果是在主类中,会优先于main方法执行。
(4).Static内部类
被static修饰的类相当于外部类,但是内部类不能与外部类的类名相同,只有内部类才能被定义为static(可以理解为内部类也是类的一个成员)。
2.1.带有static的方法,采用类名的方式访问。也可采用引用的方式。不会报错,不过没有实际意义(实例化方法才能用引用)
2.4静态代码块:
3.final
1.意义?
表最终,不可变的
2.作用?
——final修饰的类无法被继承
——final修饰的类无法被覆盖
——final修饰的变量一旦赋值后,不可重新赋值。
——final修饰的实例变量一旦赋值后,不可重新赋值。
final int age;//编译错误,
// 第一种解决方案
final int age=1;
// 第二种解决方案
final int a;
public text() {
this.a=20;
}//使用构造方法来
——final修饰的引用
final User user=new User(20);
user=new User(59);//错误,一旦指向某个对象后,不能再指向其他对象,被指向的对象无法被垃圾回收器回收
user.id=40;//但指向的对象还是可以被修改的。
——final修饰的常量
与static联合使用:public static final 类型 常量名=值;//java规范中要求常量名全部大写,每个单词间用下划线连接,类中的变量如果使用static和final修饰,必须声明同时初始化,不可被改变
4.super
super关键字是在子类对象内部指代其父类对象的引用
Super.属性(调用当前类父类对象的属性,区分当前类对象和父类对象)
Super.方法名 调用父类方法
Super()调用父类无参构造方法
子类无参构造方法可以调用父类有参构造方法
子类有参构造方法可以调用父类无参构造方法
五.包
package 包名
命名规范:公司域名+项目名+模块名+功能名
import
用来导入其他类
语法格式:import 类名;
import 包名.*;
六.访问控制权限修饰符:
作用?
可以修饰类,变量,方法。。。
范围:public > protected > 缺省 > private