java语言的一些机制

来源: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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值