来源:https://www.bilibili.com/video/av29306544
这里列举了几个比较重要的方面,其实有很多在目前的高级语言中都有相同的机制。
this ,static
this 指的是本身,在Python 中就是self,它的功能就是利用了地址来指向当前对象
由下图可以看到,方法区可以看做是没有地址的(并不准确),而静态变量,静态方法都是在方法区,所以在静态方法中是没有this语句的,会报错,而类的非静态方法是有自己地址的,在类的非静态方法中可以使用This(通过地址)来指代当前属性,而且可以调用静态属性和方法,在静态方法中可以调用静态属性,但不可以调用非静态方法,因为不能反向找到非静态方法,因为箭头是通过地址单向指过去的,而并没有箭头通过地址从静态方法中反指回非静态方法。
类如:
public class test{
int x;
public set(int x){
this.x = x; //没有this,x就指代不明了,x是按就近原则的
}
//当然也可以采取_的方式
public set(int _x){
x=x;
}
}
内部类:分为非静态内部类和静态内部类
非静态内部类中不可以有静态方法和静态属性
静态内部类的实例方法不能直接访问外部类的实例方法,但是可以访问外部类的静态实例方法
而且调用静态内部类方法和调用非静态内部类方法也不相同:
区别就在于一个new
java是有垃圾回收机制的,通过年代回收,而c语言是没有回收机制的,java可以回收没用的对象,而c语言需要自己去处理,
垃圾回收机制通过年代(年轻,老,持久)
JDK(一般是SDK,software这里是java就是JDK)
JRE
JVM
javac将语言编译为字节码
然后再用java通过JVM虚拟机将字节码编译为具体的平台的可运行二进制
下载后
bin目录下就是可执行文件(javac)
jre就是JRE
SRC就是源程序(开源)
eclipse的wordspace就是我们以后所有程序的地方
它一个工程下有
src就是我们敲得代码
bin目录下就是src目录下的程序经过javac编译的字节码
c语言的结构体其实可以看做是没有方法只有属性的类,C++是面型对象的所以给结构体又加了方法就演变为类,就是面向对象啦!!!!!!!!!
java.lang是核心包,是自动会导入的
一个类下只有第一个需要public class name
后面的直接class name即可
java中的类默认是继承java.lang包下的Object(快捷键Ctrl+T查看类的继承结构),所以可以将Object看成是最早的祖先
来看一下Object这个类(按住Ctrl点击)
最常用的也是最常被其子类重写的便是toString方法,print一个对象的时候其实就是调用了该方法
还有equals判断对象是不是相同
stu instanceof Student:判断一个对象是不是一个类(及其该类的父类)的实例对象
重载(overload)同名的方法,不同的形参(在同一个类下)
重写(override)子类重写父类的方法,用自身的行为代替父类的行为,做法很简单就是在子类中再一模一样的重写一下该方法
重写的方法:类型小于等于父类的类型比如有一个类继承关系:
Object->Person->Student
父类中有一个方法返回的是Person
那么子类在重写该方法的时候可以返回Person或者Student,但返回Object会报错
注意这里虽然不是同名,但也算重写了父类的Person方法,但Student也算是重写 了父类的Person方法
super的作用就是在子类调用其父类的属性和方法例如:super.name, super.GetName()
所有类的构造方法第一句都是super();写不写都是默认这句话
语句块,静态块就是
{ },里面的变量在出入花括号就没了,当然静态块是特殊的块,变量并不会消失
静态初始化块第一句永远也是super();
封装:
这里的子类应该写为不同包的子类更容易理解
一般的话就是private+get/set方法,还有其他方法的话就用public
如果一个类中只有get/set方法,就是所谓的javabean规则javabean
final:
类加final代表不能被别的类继承
一个类的方法加final修饰就代表该方法不能被其子类重载
foreach只有遍历读取功能,不能去修改
//遍历读取a数组
for(int m:a){
System.out.printIn(m);
}
interface类中只有:
常量和抽象方法(abstract在interface类中可以省略)
常量必须是public static final
抽象方法必须是public abstract
否则报错
实现接口的话:
注意这里不是使用继承的extends而是implements
一个类可以实现多个接口,但不能继承多个类
接口的目的就是将设计工作和实现工作分离开来,接口可以看成就是一种规范说白了就是:如果你是,,就必须有实现,,,
同时接口可以多继承:
多态,回调:可以使用继承也可以使用接口
java里面:Student继承了Person
Person s= new Student()
的意思是s是一个Person类型,它的复制时Student,所以假如Students中自己定义了一个属性id,而Person中没有该属性,那么s.name就会报错,因为它是一个Person类型,除非进行类型转化即s = (Student) s