封装、static、this、包机制

构造方法:

	声明:	[权限修饰符]  方法名  (参数)  {方法体} 
                               (方法名必须同类名一致)
      作用:   创建对象,初始化成员属性

方法声明:[修饰符列表] 返回值类型 方法名 (参数列表) {方法体}

注意事项:方法声明五部分构成,需注明返回值类型,无返回值写void;
构造方法声明四部分构成,构造方法没有返回值,便无返回值类型这一项,也不用写void;

问题:成员方法和构造方法可以同名吗?
相当于 成员方法和类名可以同名吗?
首先分析,成员方法的命名。
符合命名规则即可,强制要求与非强制要求。
强制要求:1.只能是数字,大小写字母,美元符号$,下划线_,且数字不能开头
2.不能使用关键字,保留字
非强制要求:驼峰命名法,望文知意;
符号命名规则即可,故可以重名;
问题:既然同名,那么如何区分成员方法和构造方法?
通过返回值来区分,声明方法时是否有返回值类型。
有返回值类型就是成员方法,没有就是构造方法。
首先分析成员方法,有两种情况。
其一,有返回值类型,八大基本数据类型。
其二,无返回值类型,但是需要用void声明。
而构造方法没有返回值,声明的时候也没有返回值类型。

this关键字

1.什么是this?
this是每个对象中用于保存自身内存地址的一个引用类型的成员变量。
并且默认第一个变量就是this;
相当于我们说“我”一样,this表示对象自己
2.this能做什么?
①在成员/构造方法中,区分成员变量和局部变量;
②在构造方法中,用于重载调用当前类中其他的构造方法;(必须写在第一行)
③return this; 返回当前对象的内存地址,可以做到链式调用;
3.如何使用this?
代码演示
4.注意事项
this不能出现在静态方法中
this与对象相关;静态属于非对象,是类级别的;
报错,无法从静态上下文中引用非静态变量this;

this重载调用当前类的其他构造方法(必须出现在构造方法第一行)

语法:this(参数);

链式调用:

	语法:xxx.方法().方法().方法()……
	核心点:前者xxx的返回值,一定是可以调用后者方法的引用

static 修饰符
1.static修饰的类体中的变量是静态变量
2.static修饰的方法是静态方法
3.static修饰的语句块(代码段)是静态语句块(代码段)
语法:static{
java代码;
}
规则:
静态语句在类加载阶段执行,仅执行一次;
静态语句和静态变量都是在类加载阶段初始化的,优先级一致,按顺序执行;
不能在静态语句块中,提前使用静态变量,而在方法中可以;
静态语句块等同于静态变量,但是没有名字,不能被调用,复用;
静态语句块常用于类调用日志的记录;
什么时候开始类加载?
类加载发生在访问某个类的静态属性的时候。
流程:
程序启动,首先找到入口方法main方法。
在main方法执行之前,此时程序处于类加载阶段;
初始化static属性,静态语句与静态变量在这个时候被初始化;
且静态语句块仅能加载一次,加载成功后。
main方法开始执行。

实例语句块(动态语句块)

语法:{
java代码;
}

实例语句块等同于成员方法;
同静态语句块一样,都没有名字;
创建对象,每次实例化都执行一次;

执行顺序:
静态语句块>main方法>实例语句块[需要新建(new)对象才会执行]
在构造方法之前执行,实例几次就执行几次;
静态属性的调用(与类相关,与对象无关)
静态调用可以使用类名调用,也可以使用对象调用;
静态方法在编译的时候,就会把变量转换为对应的类名去调用;

变量的分类:
静态变量:类中使用static修饰的
成员变量:类中没有使用static修饰的
局部变量:方法中声明的变量是局部变量,作用域是当前方法体;

静态变量和成员变量的区别和使用场景:
初始化时机:静态变量,在类加载阶段初始化;
成员变量,创建对象的时候初始化(构造方法);
应用场景:静态变量,类级别的;是所有对象共享的,所有对象共享的属性和值;
成员变量,对象和对象之间有相同的属性,不同的值;非对象共享;

软件包机制

目的:当前文件的编译和运行;
为什么引入软件包机制?
1.为了解决类命名的冲突问题;
2.在java中使用package语句定义包
3.package语句只能出现在java源文件实际代码中的第一行
4.包命名通常采用公司域名倒序
5.package限制了class文件放置的位置;(编译后的class文件放在哪里)
6.完整的类名是带有包名的
7.带有包名的文件,编译应如下:
javac -d 生成路径 java源文件路径
javac - d ./ -encoding utf-8 _01Packeage.java
8. 运行 java包名.类名
什么是文件名?即为能找到文化的全路径;
注意:使用非当前包下的类时,必须写全。包名.类名去找到对应的类使用。

import:

	1.引入其他需要的类
	2.只能出现在package语句之下,class语句之上
	3.java核心类不需要导入,可以直接使用,其他都需要导入
				java.lang

语法:
import 包名.类名; 导入单个类
import 包名.; 导入该包下所有的类
注意:
在eclipse编程过程中,按空格的时候会自动导包,注意包导对了没有!
导入该类中所有的静态属性(静态变量/静态方法),在当前类可以不加前缀,直接调用;
一般不导入全部类;

猜你喜欢

转载自blog.csdn.net/MIRACLE_Ying/article/details/112598619