面向对象的几个基本关键字(二)

static关键字

定义:
static表示全局或者静态,用来修饰成员变量和成员方法,也可以形成静态static代码块。
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

面向对象的几个基本关键字(一)

类变量:类变量在类中用static关键字声明,在任意的方法,构造函数和代码块外部

类变量在程序启动时被创建,在程序结束时被销毁

常量:

常量是标记为final关键字的类变量,类变量的特性常量均有,再次列出与类变量的区别。
声明常量时必须赋值,且赋值后不能改变其值。
常量名称一般都需要大写。
类变量被存储在常量存储器中。

实例变量:实例变量在类中被声明,在任意方法,构造函数和代码块外部

在new一个对象的时候创建,在对象销毁时销毁

局部变量:

在方法,构造函数,代码块声明
在进入方法,构造函数时创建,退出时被销毁
ava修饰符是用来修饰Java中的标识符(包括变量名、方法名、类名、包名和参数名等等)的,用来改变它们的含义的关键词。 Java语言有各种各样修饰符,大体分为两类:访问控制修饰符、非访问控制修饰符。
public
公共的。Java语言中访问限制最宽的修饰符,被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。​
private
私有的。Java语言中对访问权限限制的最窄的修饰符,被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protected
被保护的。介于public和private之间的一种访问修饰符。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default:
默认的。即不加任何访问修饰符。该模式下,只允许在同一个包中进行访问。

jvm知识总结(二)

垃圾回收机制

如何判断垃圾回收对象
1.引用计数算法
2.根搜索算法
基本原理:GCRoot对象作为起始点(根)。如果从根到某个对象是可达的,则该对象称为可达对象(存活对象,不可回收对象)。否则就是不可达对象,可以被回收。
新生代的垃圾收集器通常使用复制算法,将没有被引用的对象清理掉然后即将存活的对象放入老生代
复制算法

触发条件:新生代采用“空闲指针”的方式来控制GC触发,指针保持最后一个在新生代分配的对象位置,当有新的对象要分配内存时,用于检查空间是否足够,不够就触发GC。新生代的GC通常叫做young GC,有时候也叫minor GC。

老生代与新生代不同,对象存活的时间比较长,比较稳定,因此采用标记/整理(也叫标记-紧凑,Mark-Compact)算法。

给远方的你

最近在学ps随意的一张小照,让我觉得该给你送一点不一样的七月,我就是你那最不可留下来的欣赏,我知道我还在路上你,不知道在远方。
思念是一首诗
当你还在徘徊的时候,我知道你心中无数,可是你还是向往远方,远方有你所爱,所想,所思,我只能继续在这里深造,当下一个晨曦到来,我也许才会走,我知道你会回来,可是是否在你之前呢,我不知道我也不保证,就像风,吹走了思念,却带不来你的脚步。我只是一个站在原地的人,天涯海角,天荒地老,我只希望我只是一个过客,愿为了不该等的人而等,为了不切实际的幻想也能拿出自己的抉择,我在,故生活才有存在的意义

深夜感想

1
$ 如果还有一种信仰让我向前,那就是善良与追逐

很久以前我就一直坚定我的前进的事,当你很不懂如何解读自己的人生的时候,我只能摸着黑暗继续向前走,现在还是那么的杂乱无章的学习,现在还是缺少一个继续下去的勇气和魄力,也许我该转向另一种极端,然后继续探讨吧,我知道有一种成功就是把我自己先忘记,然后按照别人的方式去做,我知道我做不到,我还在这里站立,马上就要走到 大学与社会的路口,我知道我该做出我自己的选择,就像那时候我选择了继续学习那样,这次却更加的具有象征意义,也许我一直在追赶,不只是为了自己还有别人,那些逝去的岁月总让我不在心急气躁,我需要的不再是一个弱者,也许这就是我能够看透自己的一点奖励吧,但我知道路走要一个人走,前路还是那么的高深莫测,我需要勇气选择自己的路。
一路向前
既然选择了前方,便只顾风雨兼程。

关于jvm的学习总结(二)

java内存模型

java平台自动集成了线程以及多处理技术。
定义
JMM(Java内存模型,Java Memory Model的缩写)是控制Java线程之间、线程和主存之间通信的协议。
内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存、从内存中取出变量这样的底层细节。
内存模型的规则:
原子性
可见性
可排序性
jvm实例:
1.java虚拟机有一个类加载器作为jvm的子系统,类加载器针对class文件进行检测来加载对应的类接口
2,jvm内部有一个执行引擎,用来负责代码的解释和执行
3,程序运行,通过内存来存储字节码,附加信息,对象,方法参数,返回值,局部变量以及中间结果的很多内容

几个重要的注意点

访问权限

private
私有仅仅是封装的一种体现形式而已。
私有成员:其他类不能直接创建对象访问,所以只有通过本类对外提供具体的访问方式来完成对私有的访问,可以通过对外提供函数形式对其进行访问
好处:可以在函数中加入逻辑判断等操作,对数据进行判断等操作
总结:开发时,记住,属性是用于存储数据,直接被访问,容易出现安全隐患,所以,类中的属性通常被私有化,并对外提供公共的访问方法

成员变量和局部变量的区别:

1:成员变量直接定义在类中。
局部变量定义在方法中,参数上,语句中。
2:成员变量在这个类中有效。
局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。
局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。
针对性,函数中的一种。

java内存基础

java分了5片内存。

1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。

栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制。

,