JAVA 基础知识整理-07 形式参数和返回值的引用类型,匿名内部类

1. 形式参数和返回值

形式参数里面的引用类型:
类:需要的是该类的对象
抽象类:需要是的该抽象类的子类对象
接口:需要的是该接口的实现类对象

返回值的引用类型:
类:返回的是该类的对象
抽象类:返回的是该抽象类的子类对象
接口:返回的是该接口的实现类对象

2. 链式编程
特点:每次调用完毕后,返回的是一个对象。
格式:对象.方法1().方法2()…方法n()。从方法1到方法n-1每次调用之后返回一个对象。
举例:sd.getStudent().study();

3. 包
作用:
1)区分相同的类名。
2)对类进行分类管理。

定义: 小写字母。多级包用.隔开

注:
1)package语句必须是程序的第一条可执行的代码。
2)package语句在一个java文件中只能有一个
3)如果没有package,默认表示无包名。

带包的编译和运行:
手动式:
a.编写一个带包的java文件。(就是开头写上package xx.xxx)
b.通过javac命令编译该java文件。
c.手动创建包名。
d.把b步骤的class文件放到c步骤的最底层包
e.回到和包根目录在同一目录的地方,然后运行带包文件。

自动式:
a.javac编译时带上-d 即可。比如javac-d.HelloWorld.java

4. 不同包下类之间的访问
import 包名.类名;

5. 权限修饰符

private只能在本类中访问
默认本类,同一个包内可以访问
protected本类,同一个包,不同包的子类可以访问
public本类,同一个包,不同的包可以访问,是最大的修饰权限

6. 常见修饰符

权限修饰符:private,默认,protected,public
状态修饰符:static, final
抽象修饰符:abstract

类可以使用的修饰符:
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract

成员变量可以使用的修饰符:
权限修饰符:private,默认,protected,public
状态修饰符:static, final
用的最多的:private

构造方法可以使用的修饰符:
权限修饰符:private,默认,protected,public
用的最多的:public

成员方法可以使用的修饰符:
权限修饰符:private,默认,protected,public
状态修饰符:static, final
抽象修饰符:abstract
用的最多的:public

除此以外的组合:
成员变量: public static final(比如public static final int X = 20;)
成员方法:public static ; public abstract; public final(比如:public static void show(){}, public final void show(){},public abstract show()😉

7. 内部类
定义在一个类的内部的类叫内部类。
内部类的访问规则:
1)内部类可以访问外部类的成员包括私有。
2)外部类要访问内部类的成员,必须创建对象。

内部类的分类:

A.按照位置不同
可以分为成员内部类和局部内部类 。

成员内部类:
可以用private修饰(安全性)
可以用static修饰(方便性)
非静态成员内部类的访问方式:访问方式–外部类名.内部类名 对象名 = new 外部类名.new 内部类名()
静态成员内部类的访问方式:访问方式–外部类名.内部类名 对象名 = new 外部类名.内部类名()

class Outer{
	public int num = 10;
	class Inner{
		public int num = 20;
		public void show(){
			int num = 30;
			System.out.println(Outer.this.num);//输出10
			System.out.println(this.num);//输出20
			System.out.println(num);//输出30

局部内部类:

局部内部类访问局部变量必须加final修饰。
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。所以,堆内存还是用该变量,而该变量已经不存在了。加上final修饰可以保存该变量的值。

class People{
	private int age = 10;
	public void show(){
		final int height = 190;//此处的变量若要被局部内部类访问那么必须加final
		class Stu{
			public void show(){
				System.out.println(height);
			}
		}
	}
}

8. 匿名内部类

是局部内部类的简化形式。
前提:存在一个类或者接口
格式: new 类名或者接口名(){
重写方法
}
本质:其实是继承该类或者实现接口的子类匿名对象

匿名内部类在开发中的使用:
如果看到抽象类,或者接口作为参数,那么其实本质上是要传递一个子类对象。

class abstract Person{
	public abstract void study();
}
class PersonDemo{
	public void method(Person p){
		p.study();
	}
}
class PersonTest{
	public static void main(String[] args){
	PersonDemo pd = new PersonDemo();
	pd.method(new Person(){
		public void study(){
			System.out.println("keep learning...");
		}
	};//此处的分号不能漏掉
}

}
abstract class Animals{
	abstract void Species();
}

class Livingthing{
	public  static Animals method(){
		Animals a = new Animals(){
			void Species(){
				System.out.println("I'm an animal!");
			}
		};
		return a;
	}
}
//上面的代码还可进一步简写成:
//class Livingthing{
	//public  static Animals method(){
		//return new Animals(){
			//void Species(){
				//System.out.println("I'm an animal!");
			//}
		//};
	//}
//}
public class TestDemo {
	public static void main(String[] args) {
		Livingthing.method().Species();//分析:能通过类名调用的方法只能是静态方法,而这个静态方法之后又继续调用另一个方法,说明调用这个静态方法之后返回了一个对象,因此method方法是一个返回对象结果的静态方法。
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值