package
作用
由于我们需要使用的类太多了,如果不能够合理的组织,则必然造成混乱,所以使用package关键字来声明包,在这个包下的类即使与其他包中的类重名也不会有问题,但是同一个包中不能存在相同的类。所以我们当前使用的类的全称应该是包名.类
。
包名建议
通常建议将包名全部小写。在包名上还有一些规则,根据具体情况而定,因为如果不进行包名的规定,则可能在开发过程中会出现问题,有可能存在包名冲突,所以根据具体的情况而定。建议为:域名反写.项目名称.模块名称.类名
。
例子
- 在Java中有包java.util,其中存在类Scanner,当我们需要引用时则完整的类表示为
java.util.Scanner
。当需要定义时如下:
java.util.Scanner scan = new java.util.Scanner(System.in);
int num;
num = scan.nextInt();
- 在程序中声明包时为:
package test
public class Test{
...
}
import
由于我们上面创建了包,然而当我们想用包中的类时,我们需要加上类的全称,因为太麻烦了,所以Java中有一个新的语法,使用import关键词导入包中的类。
例子
如当我们使用java.util中的Scanner类时,只需要写成如下,就不需要像之前那样写上类的全称了。
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
tips
在同一个包下的类不能有重复的名称
使用import java.util.*;
可以导入java.util包中的所有类
访问控制修饰符
访问控制修饰符总共有4种,分别为:public
、protected
、private
和默认的
。
public
使用public修饰的成员变量和方法表示共有的,权限最大。即在任何地方都能够调用(任何类)。
public int num;
public void test(){
...
}
protected
使用protected修饰的成员变量和方法表示受保护的,即只能在同一个包的类、派生类以及本类中可以调用。超出其中范围则不能够调用。
protected int num;
protected void test{
...
}
默认的
默认的权限即在成员变量和成员方法前什么也不写,就表示为默认的。其作用位置为本类以及同包类。
int num;
void test(){...}
private
private表示私有的,当使用该关键字定义方法和属性时则只能在本类中访问。
private int num;
private void test(){...}
访问权限例子
如下例子:首先Doo类是Aoo的派生类,所以在Doo中可以访问Aoo中的x和y,而Coo与Aoo是在不同包中,则只能访问public修饰的y。
package one;
public class Aoo{
private int num = 0;
int age = 23;
protected int x = 3;
public int y = 4;
}
package two;
import one.Aoo;
public class Coo{
public static void main(String[] args){
Doo a = new Doo();
a.y;
}
}
class Doo extends Aoo{
void show(){
Doo a = new Doo();
a.x;
a.y
}
}
tips
根据以上例子我们可以发现判断是否能在某类中访问成员变量和方法,首先判断该方法和成员变量属于谁,如果是派生类则继承的属性看超类;然后判断类之间的关系。
final
使用final关键词修饰
- 变量表示不能够被改变;
- 修饰的方法则不能够被重写;
- 修饰类时则不能被继承。
static
static
表示静态的,即使用该修饰符修饰的方法和成员变量在内存中只有一份,可以通过类名调用,因为只有一份,所以当某个对象改变该值时,其余该类实例化的对象的值会跟着改变。
静态变量
使用static修饰的成员变量,通常使用类名点来访问。当所有的对象都共享的数据可以使用static修饰,如:图片、音频、视频等。
private static int num;
静态方法
与静态变量大致相同,在静态方法里没有隐式的this传递,所以在静态方法中不能直接访问实例成员和方法(非静态方法中有隐式传递this)。当方法的操作仅和参数有关时,可以将方法变成静态方法。
public static void main(){}
静态块
在类被加载期间自动执行,通常在初始化静态资源时使用
static{
num = 0;
}
常量的定义
通常常量的定义使用static final
,在声明常量时要同时初始化,不然会编译错误。建议名字全大写,多个单词用下划线隔开。
public static final int NUM = 0;
tips
表示访问控制的能够修饰类的只有public
和默认的
,可以使用final
修饰类。
使用static
修饰的变量和方法都存在方法区中。
实例化变量通常在构造方法中初始化,静态变量通常在静态块中初始化。
通常将数据私有化,行为公开化。