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方法是一个返回对象结果的静态方法。
}
}