匿名对象:
匿名对象创建
匿名对象调用方法
package com.oracle.demo01;
public class test {
public static void main(String[] args) {
//匿名对象创建
new person();
//匿名对象调用方法
new person().eat();
//注意这里的new person()和上面的new person()不是一个,切记
}
}
匿名对象可以作为方法接收的参数使用
匿名对象可以作为方法方法返回值使用
package com.oracle.demo01;
public class person {
public void eat(){
System.out.println("吃饭");
}
//匿名对象可以作为方法方法返回值使用
public person name(){
/* person p = new person();
return p;*/
return new person();
}
//匿名对象可以作为方法接收的参数使用
public void test(){
ceshi(new person());
System.out.println("..");
}
public void ceshi(person p){
System.out.println("1111");
}
}
内部类:
成员内部类
创建成员内部类对象
成员内部类对象调用方法
package com.oracle.demo02;
public class test {
public static void main(String[] args) {
//创建成员内部类对象
outer.name na = new outer().new name();
//成员内部类对象调用方法
na.eat();
na.get();
}
}
具体取值:
package com.oracle.demo02;
//外部类
public class outer {
int i = 1;
//成员内部类 处于成员位置
class name{
int i = 2;
public void eat(){
System.out.println("吃饭");
}
public void get(){
int i = 3;
System.out.println(i); //3 取到成员内部类中的局部变量
System.out.println(this.i); //2 取到成员内部类中的成员变量
System.out.println(outer.this.i); //1 取到外部类中的成员变量
}
}
}
局部内部类:
利用外部类对象访问局部内部类方法
package com.oracle.demo02;
public class test2 {
public static void main(String[] args) {
//创建外部类对象
outer2 o = new outer2();
//利用外部类对象访问局部内部类方法
o.name();
}
}
在外部类的成员方法中创建局部内部类对象
package com.oracle.demo02;
//外部类
public class outer2 {
public void name(){
//局部内部类 处于局部变量的位置
class Inter{
public void eat(){
System.out.println("吃饭");
}
}
//在外部类的成员方法中创建局部内部类对象
Inter i = new Inter();
//局部内部类对象调用方法
i.eat();
}
}
匿名内部类:
创建人 类
package com.oracle.demo05;
public abstract class person {
private String name;
private int age;
public abstract void eat();
public person() {
super();
}
public person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建匿名内部类;
匿名内部类调用方法;
package com.oracle.demo05;
public class test {
public static void main(String[] args) {
//匿名内部类
/*new 父类或接口(){
//进行方法重写
};*/
new person(){
public void eat(){
System.out.println("第一个人吃饭");
}
};
//匿名内部类调用方法
new person(){
public void eat(){
System.out.println("第二个人吃饭");
}
}.eat();;
}
}
包的声明和访问:
java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。
声明: 通常将公司网址反写
package 包名.包名.包名…; //包的声明,必须在有效代码的第一行
//导包
访问:必须使用含有包名的类全名(包名.类名)
//包名.包名….类名
java.util.Scanner
java.util.Random
com.oracle.Demo
//带有包的类,创建对象格式:包名.类名 变量名 = new包名.类名();
com.oracle.Demo d = new com.oracle.Demo();
import导包:
导包的格式:
import 包名.类名;
访问修饰符:

举个例子:

package com.oracle.demo06;
public class A {
//public
public int a = 1;
//private
private int b = 2;
//default
int c = 3; //注意默认访问修饰符千万别写在前面
//protected
protected int d = 4;
//同一个包中同一个类 都可以访问到
public void ceshi(){
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
package com.oracle.demo06;
public class B {
public static void main(String[] args) {
//同一个包子类与无关类
A aa = new A();
System.out.println(aa.a);
//System.out.println(aa.b);//private 修饰的b访问不到
System.out.println(aa.c);
System.out.println(aa.d);
}
}
package com.oracle.demo07;
import com.oracle.demo06.A;
public class C {
public static void main(String[] args) {
//不同包无关类
A aa = new A();
System.out.println(aa.a);
//System.out.println(aa.b);//private 修饰的b访问不到
//System.out.println(aa.c);//default 修饰的c访问不到
//System.out.println(aa.d);//protected 修饰的d访问不到
}
}
package com.oracle.demo07;
import com.oracle.demo06.A;
public class D extends A{
public static void main(String[] args) {
D dd = new D();
System.out.println(dd.a);
//System.out.println(dd.b); private 修饰的b访问不到
//System.out.println(dd.c); default 修饰的c访问不到
System.out.println(dd.d);
}
}
代码块:
静态代码块和构造代码块:
举个例子:
package com.oracle.demo03;
public class person {
//静态代码块
static{
System.out.println("这是静态代码块");
}
public person(){
System.out.println("这是构造方法");
}
{
System.out.println("这是构造代码块");
}
}
package com.oracle.demo03;
public class test {
public static void main(String[] args) {
person p = new person();
person p1 = new person();
}
}
效果如下:
静态代码块优先于构造代码块优先于构造方法,
另外静态代码块只调用一次
