11
带包编译
1.首先使用高级编辑器或记事本编写一个HelloWorld程序
package com.doit.test;
class HelloWorld{
public static void main(String[]args){
System.out.println("hello world");
}
}
2.命令行编译执行
-
手动式 :
-
命令行编译HellWorld.java
-
按照包的格式将对应的文件夹创建好 , 将HelloWorld.class文件拷贝到创建好的文件夹中
-
命令行执行
-
-
自动式 :
- javac(空格)-d(空格).(空格) HelloWorld.java
- java(空格)包名.类名
附:
- java文件的结构 : 1.包结构 2.导包 3.类
- 默认情况下 , lang包下的所有的类都不用导包
- 其他的java类 , 都需要导包 , 包括lang包下面的子包
权限修饰符
- public : 修饰类 , 变量和方法 . 可以在任意时候 , 任意地点随意访问
- protected : 修饰变量和方法 . 受保护的 , 当前包内随意访问 . 若跨包访问 , 则必须成为当前类的子类 , 而且调用该方法 , 必须在子类中创建子类对象才能调用
- default : 当前包内随意访问 . 不允许跨包访问
- private : 只能在当前类中访问
public | protected | default | private | |
---|---|---|---|---|
同一类 | √ | √ | √ | √ |
同一包(子类/其他类) | √ | √ | √ | |
不同包子类 | √ | √ | ||
不同包其他类 | √ |
内部类
- 定义在类内部的类
成员内部类
-
没有static修饰 , 定义在成员的位置 , 跟成员方法和成员变量平级的内部类叫做成员内部类
-
成员内部类不能定义静态的方法和变量
-
成员内部类可以无限制访问外部类中的成员 , 包含私有变量和静态成员
-
创建内部类的对象
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
内部类中访问外部类中同名成员
外部类名.this.成员
//成员内部类
public class Demo1 {
public static void main(String[] args) {
Outer.Inner in = new Outer().new Inner();
in.show();
new Outer().new Inner().show();
}
}
class Outer{
private int a = 11;
class Inner{
int a = 22;
public void show() {
System.out.println("Hello World!!"+"--"+new Outer().a);
System.out.println("Hello World!!"+"--"+Outer.this.a);
System.out.println("Hello World!!"+"--"+this.a);
}
}
}
局部内部类
- 定义在方法中或者代码块中的类 , 跟局部变量平级
- 局部内部类只能在方法中被认识
- 局部内部类不能使用 public private protected 修饰符修饰
//局部内部类
public class Demo2 {
public static void main(String[] args) {
Outerr out = new Outerr();
out.show();
}
}
class Outerr{
private int a = 11;
public void show() {
int b = 22;
class Innerr{
public void get() {
System.out.println("我是局部内部类的get方法"+a+b);
}
}
Innerr inn = new Innerr();
inn.get();
}
}
静态内部类
- 定义在成员位置 , 被static修饰的类
- 静态内部类中既可以定义静态成员 , 又可以定义非静态成员
- 有静态成员的内部类一定是静态内部类
访问静态内部类中的成员
//静态成员
外部类名.内部类名.静态成员
//非静态成员
new 外部类名.内部类名().非静态成员
//静态内部类
public class Demo3 {
public static void main(String[] args) {
Outer.Inner.show();
new Outer.Inner().get();
}
}
class Outer{
int a = 0;
static class Inner{
static int b = 10;
public static void show() {
System.out.println("Inner show");
}
public void get() {
System.out.println("Inner get");
}
}
}
匿名内部类
- 想要继承一个类或者实现一个接口用于重写里面的某些方法 , 使用匿名内部类
- 本质是一个实现接口或者继承了(抽象)类的子类的 对象
格式 :
new 接口名/类名(){
重写或者实现的方法
}
//匿名内部类
public class Demo4 {
public static void main(String[] args) {
Animal ani = new Animal() {
@Override
public void sleep() {
System.out.println("动物都爱睡觉");
}
};
ani.sleep();
new User() {
@Override
public void login() {
System.out.println("用户登录成功");
}
}.login();
}
}
abstract interface Animal{
public abstract void sleep();
}
interface User{
public void login();
}