javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)

形式参数和返回值类型、包、内部类、匿名内部类

形式参数:值传递

基本类型:将实参的值复制一份传给形参

引用类型:将实参的引用传递给形参,将导致形参和实参都指向同一个实例对象。

返回值类型

基本类型:返回的是一个基本数据类型的值;

引用类型:返回的是一个对象的引用。

链式编程

当一个方法的返回值是引用类型的时候,它返回的是一个对象的引用,那么就可以直接在此基础上访问这个对象的方法,当被调用的方法的返回值依然是一个引用 的话,还可继续再调用所返回对象的方法。

当形参为抽象类时:返回的是该抽象类的实现子类的对象;

形参为接口,返回的是该接口实现类的对象;

类名作为返回值,返回的是该类的实例对象。

包 package

为了避免同名类过多而产生混乱,在类前加上额外的限定;

作用:可对类进行分类管理,格式通常是公司域名倒写,在后面加上项目名等。

-cp 指明所依赖的包及运行的类的目录(即类路径,包所在路径),彼此之间用“;”分开;

-d表明生成带包类的层次目录,会在指定目录下,自动创建出和包结构相对应的目录,并将生成的.class类文件放入到最里面的文件夹中。

在使用带包的类时,必须使用完整类名(包名+类名)来访问。

定义格式

package 包名: 包名只要是有效的标识符即可,通常使用小写字母,多级包用“.”分开即可,一个圆点代表一个文件夹。

注意事项

1、package语句必须是程序的第一条可执行代码,前面有注释没有影响。

2、pacekage语句在一个java文件中只能有一个;

3、一旦定义了包。则类的使用的时候就用包名.类名的方式。

4、执行顺序:package-->import -->class

package只能有一个,并且必须是文件的第一条可执行语句; import:在类之前,并且可以有多个;

类成员权限

类及成员所用修饰符:

类:

1、四种权限中可以使用两种(默认的,public),final,abstract

2、我们自己定义:public居多

成员变量:

1、四种权限修饰符均可,final,static

2、我们自己定义:private居多

构造方法:

1、四种权限修饰符均可,其他(final,static)不可

2、我们自己定义:public 居多

成员方法:

1、四种权限修饰符均可,fianl,static,abstract

2、我们自己定义:public居多

内部类

把类定义在其他类的内部,这个在其他类里面的类就是内部类。

内部类的访问特点

1、内部类可以直接访问外部类的成员,包括私有;

2、外部类要访问内部类的成员,必须通过创建内部类对象来完成。

内部类位置

两种格式: 成员位置(成员内部类);局部位置(局部内部类);

成员内部类分为两种:

1、private修饰的私有成员内部类:只能通过在外部类中定义公有方法对私有内部类进行访问,否则不能直接访问私有的成员内部类。

2、static静态成员内部类:直接通过外部类名.内部类名来访问。

1 int num = 10;
2 static int num2 = 20;
3 public static class Heart {
4     // int a = num;    //外部类的非静态成员不能访问
5         int b = num2;        //OK,只能访问外部类的静态成员
6     }

 

被静态修饰的成员内部类只能访问外部类的静态成员;不能访问外部类的非静态成员;但可以有静态非静态方法,都只能访问外部类的静态成员;

1、外界访问静态内部类的方法:

1 Outer.Inner ii = new Outer.Inner();
2 
3 ii.func1(); 

不能用 Outer.Inner oi = new Outter().new Inner();

2、非静态成员内部类(如用public修饰的): 只能定义非静态方法、非静态变量,但可以访问外部类的静态和非静态成员;

 1 class Outer{
 2     int num1 = 1;
 3     static int num2 = 10;
 4     public class Inner{
 5         //static int age = 18;//error非静态成员内部类不能定义静态成员变量
 6         public Inner(){}
 7         /*void func1(){
 8             System.out.println(num1);
 9             System.out.println(num2);
10         }*/            //OK,非静态成员内部类只能定义非静态方法
11         /*
12         static void func1(){
13             System.out.println(num1);
14             System.out.println(num2);
15         }
16         */            //error,非静态成员内部类不能定义静态方法
17     }
18 }

 

局部内部类

可以直接访问外部类的成员;

可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能。

 1 class Outer {
 2     private int num  = 10;
 3     
 4     public void method() {
 5         //int num2 = 20;
 6         //final int num2 = 20;
 7         class Inner {
 8             public void show() {
 9                 System.out.println(num);
10                 System.out.println(num2);    
11             }
12         }
13         //System.out.println(num2);
14         Inner i = new Inner();
15         i.show();        //?这样写有点麻烦,有没有简便写法?
16     }
17 }
18 
19 class InnerClassDemo5 {
20     public static void main(String[] args) {
21         Outer o = new Outer();
22         o.method();
23     }
24 }

 

匿名内部类

前提,存在一个类或者接口

格式 :new 类名或者接口名(){重写(实现)方法;}

本质:是一个继承了类或者实现了接口的子类匿名对象。

 

 1 interface Person{
 2     public abstract void show();
 3 }
 4 //非匿名方式
 5 class Student implements Person{
 6     public void show(){
 7         System.out.println("students show");
 8     }
 9 }
10 class PersonDemo{
11     public Person test(Person p){
12         p.show();
13         return p;
14     }
15 }
16 class InterDemo{
17     public static void main(String[]args){
18         PersonDemo pd=new PersonDemo();
19         Student s=new Student();
20         // pd.test(s);
21         pd.test(new Person(){
22             public void show(){
23                 System.out.println("ni ming");
24             }
25         });//匿名内部类
26     }
27 }

 

 

原文地址:https://www.cnblogs.com/yihaifutai/p/6628687.html