1 static关键字
1.1 概述
static是静态的意思;
static主要是用来修饰对象共享的数据.可以修饰变量,也可以修饰方法;
被static修饰变量和方法 是属于类,不属于对象;
成员变量和成员方法是属于对象,不属于类;
1.2 访问被static修饰的变量和方法
有两种方式:
1.通过对象名访问变量和方法
对象名.静态成员;
例如:Chinese c = new Chinese();
System.out.println(c.country);
不建议使用这种方法时来访问;
2.通过静态的方式访问
就是通过类名来访问:
类名.静态成员;
例如:
System.out.println(Chinese.country);
1.3 静态代码块
静态代码块是在第一次使用类时被执行的,而且是最先被执行,优先于构造方法被执行;<br /> 静态代码块只能被执行一次,就是在第一次使用类时被执行的;<br /> 应用场景:<br /> 主要用于初始化数据.<br /> 比如:在类中使用静态代码块,初始化数据库的四个连接信息;
2 final关键字
2.1 可以修饰类
格式:<br /> 修饰符 final class 类名{<br /> ...<br /> }<br /> 被final修饰的类不能被继承;
2.2 可以修饰方法
格式:<br /> 修饰符 final 返回值类型 方法名(参数列表){<br /> ...<br /> }<br /> 被final修饰的方法不能被重写;
2.3 可以修饰变量
定义常量的格式:<br /> 修饰符 final 数据类型 变量名 = 初始值;<br /> 变量的值以后就不能再改变了.其实就是在定义常量,上面的格式就是定义常量的格式<br /> 如定义常量:<br /> final int a = 100;<br /> 如果在定义常量时没有给常量赋值,需要在每个构造方法中给常量赋值(每个构造方法中常量的值可以不一样);<br />在工作中,常量的名字一般用大写.<br />在工作中,常量尽量不要定义到类里面去,一般都把项目中用到的常量都定义到一个常量的工具类里面去,然后用的时候通过类名去调用常量.
3 包
包就是用来存储.class文件文件夹.
包可以对类进行分类管理;
3.1 包的命名规则
见名知意;<br /> 有两种命名方式:<br /> 最顶层的包名:<br /> [www.csdn.com](www.csdn.com)反写成com.csdn<br /> 第一种:<br /> 根据项目中模块的名字来给包命名<br /> mobile office-auto-->moa<br /> 项目中最顶层的报名:<br /> com.csdn.moa<br /> 模块:<br /> 用户管理: com.csdn.moa.user<br /> 会议管理:com.csdn.moa.metting<br /> 邮件管理:com.csdn.moa.mail<br /> .....<br /> 工具类的包:com.csdn.moa.utils<br /> 第二种:<br /> 根据类的功能作用来给包命名:<br /> com.csdn.moa.bean/domain/entity: java bean<br /> com.csdn.moa.service:接口<br /> com.csdn.moa.service.impl:接口实现类<br /> com.csdn.moa.utils:工具类<br /> ....<br /> 推荐第二种方式;
4 权限修饰符
访问权限:是用来控制类,方法,变量等的使用范围的;
四种访问权限的修饰符:
public(公共的,公用的) —> protected(受保护的) —> 默认的(default) —> private(私有的,专有的意思);
权限从左向右依次变小;
public权限最大,private的权限最小;
权限修饰符适用范围表格
public | protected | 空的(default) | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | 可以访问静态的 | ||
不同包中的无关类 | √ |
<br /> 归纳一下:在日常开发过程中,编写的类、方法、成员变量的访问<br />l 要想仅能在本类中访问使用private修饰;<br />l 要想本包中的类都可以访问不加修饰符即可;<br />l 要想本包中的类与其他包中的子类静态的可以访问使用protected修饰<br />l 要想所有包中的所有类都可以访问使用public修饰。<br />l 注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。
5 内部类
内部类: 一个类中定义在另一个类中,这个类就叫内部类;
class Outer{
public int a = 10;
public void show(){
...
}
class Inner{
...
}
}
在一个类中,只有一个类能被public修饰. 且 .java的名字要和class后面的名字一样.
5.1内部类的分类:
5.2.1.成员内部类
内部类写在了外部类成员的位置;<br /> 使用方式:<br />先创建内部类的对象,再通过内部类对象访问内部类中定义的变量或者方法;<br /> // 1.创建外部类对象的格式<br /> 外部类名.内部类名 内部类对象 = new 外部类名().new 内部类名();<br />举例:
Outer.Inner inner = new Outer().new Inner();
然后通过inner来调用内部类中的变量或者方法
如何在内部类中调用外部类的方法和变量a?
情况1:
如果内部类中没有定义与外部类中一样的变量a, 可以直接在内部类中用(就相当于在外部类中继承过来的).
情况2:
如果内部类中定义了与外部类中一样的变量a,直接用的话访问的是内部类中的变量a.
如果此时想访问外部类中的变量a,可以用
外部类类名.this.a
5.2.2.局部内部类
定义在方法中的内部类(就是局部变量的位置);
public class Outer{
public void show(){
...
int a = 10;
class Inner{
...
}
}
}
5.3 匿名内部类
没有名字的内部类.
使用条件:
匿名内部类不能单独存在;
要求在定义匿名内部类时,必须立即创建匿名内部类的对象;
要想创建匿名内部类的对象,要求必须有接口或者父类;
一般项目中
创建匿名内部类对象有两种写法:
1.有父类
创建的是子类的对象;子类没有名字,又是写在方法内部的,所有叫做匿名内部类;
//说明:Person类是Student类的父类,第8-13行表示创建了一个匿名内部类,15-20行表示创建了一个匿名内部类然后立即调用里面重写的eat方法
public class Person{
public void eat(){
System.out.println("===Person类==eat()========");
}
}
new Person(){
// 重写父类中的eat方法
public void eat(){
System.out.println("===匿名内部类==eat()========");
}
};
new Person(){
// 重写父类中的eat方法.
public void eat(){
System.out.println("===匿名内部类==eat()========");
}
}.eat();
2.有接口
创建的是实现类的对象;实现类没有名字,又是写在方法内部的,所有叫做匿名内部类;
//说明:Animal是Cat类的接口,第6-11行表示创建了一个匿名内部类,13-18行表示创建了一个匿名内部类然后立即调用里面重写的eat方法
public interface Animal{
public abstract void eat();
}
new Animal(){
// 实现接口中的eat方法.
public void eat(){
System.out.println("===匿名内部类==eat()========");
}
};
new Animal(){
// 实现接口中的eat方法.
public void eat(){
System.out.println("===匿名内部类==eat()========");
}
}.eat();
说明:代码块里不能写方法.