封装(private)
封装是为了保护数据不被错误修改。并且可以保护类属性不被类意外类以外成员随意修改(比如粗心,或者恶意篡改等)
封装原则:隐藏对象的属性和实现的细节,仅对外公开方法,并控制访问级别
一般来说最常见的方法就是setter和getter
This关键字
this关键字指的是当前对象。所以this.attribute指的是当前class对象里面的attribute。所以如果想要调用还没对象初始化的类的构造方法,需要在方法里用this.(指代当前对象)+构造方法/属性
举个例子,下图这个类,我们想要在无参构造方法里设置一个默认值,那么就用this(string name, int age)这里可以翻译成:调用这个类里含有参数string name, int age的构造方法来创建。
但是这里要注意不要调用回环。比如构造方法A B C,不要A调用B,B调用C,C再调用A成环。这样子可能导致程序崩溃
Static
static方法或者属性是被加载在方法区的。在类一被加载(参考编译过程,加载不一定被运行)时就有了。所以这个类还没被实例化也可以使用,跟堆和栈的内存是区别开的。所以这就是为什么允许非static方法调用static,不允许static调用非static。(因为你static一开始就加载进去了,你调用非static可能都还没实例化。当然你实力化以后可以直接调用。但是非static可以直接调用是因为非static不管实例化与否static方法都存在,所以不会出问题)
代码块
代码块用最无脑的话解释就是写在两个花括号之间的代码
主要分为4种代码块:普通代码块,构造代码块,静态代码块,同步代码块
普通代码块 在执行的流程中 出现的代码块, 我们称其为普通代码块。
构造代码块 在类中的成员代码块, 我们称其为构造代码块。 在每次对象创建时执行, 执行在构造方法之前。也就是说不管运行的是哪一种构造方法都一定会执行一次
静态代码块 在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时执行。 每次程序启动到关闭 ,只会执行一次的代码块。
同步代码块 在后续多线程技术中学习。
**面试题:**构造方法 与 构造代码块 以及 静态代码块的执行顺序: 静态代码块 --> 构造代码块 --> 构造方法