Java面向对象的第二天----(第七天)
关键字:static
概念:static称为静态,可以用来修饰类的属性,方法,代码块和内部类;
特点:
1.随着类的加载而加载:
2.优先于对象存在;
3.修饰的成员被其所有对象共享;
4.可不创建对象,直接被类调用; 例如:Math.PI
5.静态方法只可以访问静态的变量,不能访问成员变量;但成员方法可以访问静态变量和成员变量;
6.静态方法与变量会优先加载于成员方法与变量。
示例:
/*
static:静态的
可以修饰:
类的属性(成员变量)
方法
代码块
内部类
*/
public class StaticDemo{
//成员变量
String mame;
//静态成员变量
static String country = "中国";
//被static修饰的放法也是存在方法区
public static void testStatic(){
//静态方法只能访问 静态的变量
System.out.println("静态方法"+country);
}
//成员方法
public void test(){
//成员方法可以方法可以访问 成员变量
System.out.println(mame);
// 成员方法可以方法 还可以方法静态变量
System.out.println(country);
}
public static void main(String[] args) {
//静态方法可以直接通过类名调用
StaticMethod.testStatic();
}
}
代码块
概念:代码块在类中声明,类似于一个没有名字的方法;
分类:
实例块:每次在创建该类对象时会自动执行;
{
……
}
静态块:在类的加载的时候就会执行;
static{
……
}
优先级:静态块 > 实例块 > 方法
示例:
/*
代码块:
实例块
静态块
*/
public class Demo {
//实例块
{
System.out.println("实例代码块");
}
//静态块
static{
System.out.println("静态代码块");
}
//构造方法
public Demo(){
System.out.println("构造方法");
}
}
//需要在另一个类中进行测试
class Test{
public static void main(String[] args) {
// 先加载类 然后创建对象
new Demo();
}
}
测试结果为:
静态代码块
实例代码块
构造方法
包
概念:可以理解为文件夹
包的命名规范:包名全小写,并且需要区分分包的级别
常用的分包格式:
第一级 指该项目的类型,如com,org,gov等,
第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei等
第三级 指项目的名称,如:bcms,oa,erp,cms等
第四级 指项目模块的名称,如:bean,action,exception等
…
作用:
1.避免重名类
全类名 : 包名(类的地址) + 类名;
import导入外部包的类:不能导入两个类名相同的,因为会引起系统无法识别使用的是哪一个包的类;因此可以通过全类名将其引用,让系统明确你想使用的是哪一个包下的类。
2.按照不同的功能管理类
3.控制访问权限
示例:
import java.util.Date;
//import java.sql.Date; 在同一个文件中不能引用外来相同的类
/*
* import 可以引用外来包的类
* */
public class Demo1 {
public static void main(String[] args) {
//默认使用import引用的类
Date date = new Date();
//如果想要使用类名相同的情况是,需要给类进行全名类
Date d = new java.sql.Date(1000);
}
}
访问权限修饰符
Java语言有四个权限访问修饰符,权限从大到小依次为:
**public :**公共权限 修饰类、属性、方法。可以被任意类访问;
**protected:**受保护的权限 修饰属性、方法。
可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问;
**default:**同包权限(默认的) 修饰类、属性、方法。只能被同包的类访问;
**private:**私有权限 修饰属性、方法。 只能在本类中访问。
public | protected | default | private | |
---|---|---|---|---|
同类 | T | T | T | T |
同包 | T | T | T | |
不同包子类 | T | T | ||
不同包的其他类 | T |
示例:
public class Demo2 {
public int pnum; //公共的
protected int pronum; //受保护的
int num; //默认的
private int prinum; //私有的
//在同一个类中可以访问到所有的
public void test(){
System.out.println(pnum);
System.out.println(pronum);
System.out.println(num);
System.out.println(prinum);
}
}