1、Java类的成员变量:

Java类中的积极分子变量可以是其余一样种植多少列(包括基本数据类及援数据类型);

当概念成员变量时可以针对该展开初始化,如果未开展初始化,Java会用默认值对那个进行初始化,如下图。

图片 1

分子变量的意范围是整类体。

标识符

2、Java类的构造方法

以对象的创导时,相当给采取了new + 构造方法来创建对象;

构造方法与一般名且没有回来值,如果协调不定义构造方法,则系统默认为其类提供一个形如类名
() {
}
的构造方法(将持有骨干数据类初始化为0,引用类型定义为null),如果我们定义了构造方法,系统则未见面再度为我们提供默认的构造方法。

Java中构造方法在调用时,构造方法中之形参会在栈内存中分配空间,当构造方法调用了晚,改栈空间就见面为清理。如下图代码:

图片 2

在拖欠方法中的main函数中,当生成一个tom对象时,内存中之成形情况入下:

图片 3

其中当栈内存中,存放了tom对象的援,以及以构造函数执行过程中生成的栈空间,存放着三三两两独形参的内存,在积内存中则存放了该对象的分子变量的音,当构造函数执行了晚,栈空间受到的_id与_age的虽会见为放飞掉。

扣押下代码中内存的图景:

图片 4

亲手画了转横的内存情况:

图片 5

末了main方法执行好后,堆内存中的start与end也为释放了,然后Java的污染源回收机制虽然会失掉清理堆内存里的多少。

3、类:具有同样类东西之一个空洞。 对象:一个近似的一个出奇之实例。

接近及对象之间的涉嫌:关联、继承、聚合(聚集、组合)、多态和兑现。

4、面向对象的设计思想:继承、封装、多态和抽象。

5、Java中之所以要字class定义一个接近;用new来创造一个目标;引用(对象的援,栈中的平略带块儿内存指向堆空间的一模一样不行块儿内存。。。);new一般和构造函数一起下(和类重名,没有返回值)。

6、方法重载(overload):在与一个接近吃,方法的名字同样,方法的参数类型或者参数个数可以不同。(构造函数的重载)。

每当调用时,会根据不同的参数表选择相应之艺术。(C++的静态多态。。。)

关键字

7、this关键字:this指的凡当下目标,在积内存中,存在一个投机的援指向自身。(最广是好用来构造函数,当构造函数中的传参与类似的性能一样不时虽可以行使如this.name

name这种写法以界别。)this也得以视作是一个变量,它的价值是时下目标的援。

8、static关键字:在接近吃,用static声明的分子变量为静态成员变量,其为此类的公用变量,在首先不成采取时吃初始化,对于此类的有目标的话,static成员变量只来相同客,分配在数据区。

之所以static声明的章程呢静态方法,在调用该法时,不见面拿目标的援传递给它们,所以static方法吃不能够访问非static的分子变量。(静态方法不再是对有对象的调用,所以不能够访问非静态成员。)

可透过对象引用或者类名(不需实例化)访问静态成员。

9、package和import语句

为缓解多好像的命名冲突之题材,Java引入package机制,提供类似的比比皆是命名空间。(包起名的法门:一般将局的域名反过来,这个近乎的class文件一定要放在正确的目录下,跟package的命名结构同样。)

使时,用import关键字引用,引入单个类为可以,使用.*引入所有的接近。Java中但是因为非以import语句就可以一直利用java.lang包中的类,比如最普遍的System和String类。

每当使用时肯定要是小心环境变量的classpath路径,必须class文件之极端上层包的父目录位于classpath下。也可用那打及一个jar包里,将jar包的途径放到环境变量中(命令:jar
-cvf xx.jar *.*)

10、访问控制权:private (default:什么还非写) protected public

图片 6

11、extends关键字:一个像样从另外一个近似继承,继承中子类继承了父类的所有的分子变量和所有的办法,包括private变量,但是private成员变量不能够因此。

12、super关键字:使用super关键字引用基类的成份。

13、继承中之构造方法:

子类的结构过程得调用基类中之构造方法;

子类可以以团结之构造方法中利用super(参数列表)调用基类的构造方法(如果调用super,必须写于子类构造方法的第一实施,即先构造父类然后构造子类;可以采用this(参数列表)调用本类中另外的构造方法。);

假若子类的构造方法中从来不显式地调用基类的构造方法,则网会默认调用基类无参的构造方法,如果基类没有无参构造方法,则编译会报错。

14、方法重写(overwrite/override):

以子类中好因需要针对基类中持续的道进行更写;

重写方法要跟为还写方法有同样的不二法门名称、参数列表和归值类型(防止串,在基类中复制。。。);

重写方法无克运用比较让另行写方法更严峻的拜访权限。

15、final关键字:

final的变量值未可知被转,类似C++的const(final成员变量,final局部变量,传参);

final的方不可知于重复写;

final的类似非能够给连续。

16、Java所有的老祖宗类,Object

Object类是颇具Java类的一干二净基类,如果以接近的声明中不使用extends关键字指明其基类,则默认基类为Object类;

toString方法:Object类中定义有public String
toString()方法,其返回回值是String类型,描述当前目标的有关信息,返回值是:类名+@+哈希code;用户可以因需要在由定义类型中再写toString()方法。

equals()方法:Object类中定义了public boolean equals(Object
obj)方法,提供靶是不是当的逻辑比较;x.equals(y)当x和y是和一个靶的援时返回true,否则回false;JDK中又写了String和Date类中的equals方法,调用这些目标的equals方法时,当半独对象的凡和一个类且对象的性内容等时(不要求凡与一个对象),返回true,否则回false;用户为足以因需要再行写起定义类型中之equals()方法。

17、upcasting:父类的援指向子类对象,接口的援指向实现了接口类的目标(C++中父类的指针指为子类)
反之downcasting

图片 7

18、多态:实现多态的老三如果素 继承、重写及父类引用指向子类对象。

动态绑定是乘:在程序执行期间,判断所引述对象的骨子里类型,根据其实际的花色调用其对应的方式(虽然盛传的凡一个父类的名,但是引用所对的凡一个子类对象,所以当程序运行时会调用子类重写父类的点子而休是父类的主意)。

19、抽象类:

因此abstract关键字来修饰一个近乎时,这个类叫抽象类;用abstract来修饰一个主意时,该方式给抽象方法;

包含抽象方法的好像必须于声称也抽象类,抽象类必须给接续,抽象方法要被再写;

泛类非能够让实例化,抽象方法才需要声明如非待兑现(在子类中再次写实现)。(C++中纯虚函数)

20、接口interface:

接口是空洞方法和常量值定义之集结;从本质上说道,接口是一样种植独特之抽象类,这种肤浅类中才含有常量和道的定义而没变量和措施的贯彻(所以的不二法门还是纸上谈兵方法,并且都是public的,所有的成员变量都是public的static的同final的);接口和接口之间可以彼此继承,类以及接口之间通过实现(implements)。

接口的原形,在内存中得以看到此类似的有些方法,也不怕是调用接口本身定义的空洞方法。

图片 8

Java基础数据类型(四类八栽,类型(大小):字节字符型:byte(1)、char(2),整型:short(2)、int(4)、long(8),浮点型:float(4)、double(8),逻辑型:boolean(1))

运算符

表达式和话语

分支

循环

方法

变量的作用域

递归调用

 

 

何以用命令提示符打jar包?

1、打开命令提示符,切换到公想如果打成jar包目录的上一级

2、输入jar -cvf xxx.jar *.*,回车即可 //格式解释:jar -cvf
+想由之jar包的讳 +想打之内容(*.*表示当前目录下之具备情节)

 

 

怎么引入jar包? 

直把这个jar文件的途径设置进ClassPath下面就是好了。

 

 

 

包(package): 

*
有一个约定俗成的命名方式,把你企业之域名倒过来写;如:com.bjsxt.java140。

* 没有点名 package 的类叫裸体类

* 编译出的 class
文件要放在正确的目录(与指定的package一致)下面,否则非同一目录下之另外的接近看不着。

* JDK1.4
以后该类的源码可能会见发出震慑,删除或转换到另外的目录下面,不要让源码位于
ClassPath 下面。

* class 文件的绝上层包之父目录必须放在 ClassPath 下。

* 执行一个看似需要写全包名。

* JDK 里面,在用之时段,就唯一个 java.lang
不欲引入,其他的,你如就此它们里面的类似,必须引入。

 

 

变量: 

分成:基础数据类型变量 和 引用数据类型变量

基础数据类型变量:在内存中据为己有一片内存,一经定义并赋值,名字与值都保存于这块内存中

引用数据类型变量:在内存中占据少数块内存,一经定义并赋值,其中同样片内存保存真正的价值(也不怕是new出来的现实的某部实例),另一样块内存保存之凡其定义的名字跟它们真的的值所在的内存地址(也就是是目标的援)

从此如果同谈到引用,脑子里将想到:一略片内存指向同好块内存

 

 

 

 

变量的作用域(成员变量和有变量): 

* 注:Java 中不可定义 static 的局部变量,也不怕说并未静态局部变量。

*
成员变量和有些变量的重中之重区别:基础数据类型的积极分子变量如果您免为它们初始化,Java会自动为它初始化,而基础数据类型的有的变量必须对其进行初始化才能够采用;而引用数据类型的变量(无论成员变量还是部分变量)都急需实例化,否则都也
null
,你切莫实例化也会以其,只不过使用时系统会废弃来空指针异常(NullPointException)。

* static 的分子变量是属通类,被该类 new
出来的备的对象共享;你莫需 new 出目标就是好直接可以为此类名访问;而休
static 的成员变量是要 new 出目标来才会开展走访。

* static 的分子变量的生命周期取决于该类,非 static
的积极分子变量的生命周期取决于该类 new
出来的对象,而有些变量的生命周期取决于它定义所在的那对花括号。

 

 

 

常量(用 final 修饰的变量): 

*
常量也属于变量的层面,它是一个破例的变量,是一个不得以改价值的变量,故吃常量。

 

 

 

 

内存分区:

1、code segment 代码区 装代码

2、data segment 数据区 装静态变量和字符串常量

3、stack 栈 装局部变量

4、heap 堆 装new出来的物

 

 

 

面向对象的统筹思想:

当您考虑一个题目之时节不该考虑第一步我只要干嘛、第二步我如果干嘛,要考虑什么为?

1、首先要考虑,作为这题目吧,在此问题域里头应该出哪些个近乎哪些个目标,这是首先触及;

2、然后重新考虑这些个类这些目标每一样种植类似每一样种对象应当具备何等个特性和方式,这是第二碰;

3、再考虑类和接近里所有了安的涉嫌。

 

 

 

仿佛及对象的概念:

类似:是有着共同特性的平好像东西之虚幻

目标:是随即无异看似东西中具体的之一实例

1、对象用微机语言对问题域中东西之描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所兼有的静态属性和动态性。

2、类是用于描述同一品种的对象的一个虚无的概念,类吃定义了立即无异类似对象所承诺享有的静态和动态性。

3、类可看做一看似对象的模版,对象可以当该类的一个有血有肉实例。

 

 

 

类似(对象)之间的涉嫌:

* 关联

* 继承

* 聚合

  ** 聚集

  ** 组合

* 多态

* 实现

 

 

延续关系(一般和特殊): 

假定会说通:“XX是一致栽XX”。

若是:足球运动员是平栽球类运动员、篮球运动员是一模一样种植球类运动员、排球运动员是千篇一律种球类运动员、球类运动员是如出一辙栽运动员、游泳运动员是均等种植运动员、射击运动员是相同种运动员

 

 

会师关系(整体以及一些): 

苟能说通:“XX是XX的同一部分”。

使:队长是球队的一致有的、队员是球队的等同有、胳膊是人数的同等局部、脑袋是人口之平等片、身体是人的平片段。

聚合分的缜密一点还可分成:聚集、组合

汇聚:松聚合 队长,一个队长就可以是篮球队的队长也得以是足球队的队长

整合:紧聚合 脑袋,没听罢一个脑壳就属于你为属于他吧

 

 

 

兑现关系(父类和子类): 

 

 

 

 

多态(也吃动态绑定,也叫迟绑定): 

*
指的是在实施中(而非编译期间)判断所引用对象的其实类型,根据其实际的档次调用其相应的法门。

* 多态的是发生三只必要条件:

  ** 1、要起继承

  ** 2、要有重写

  ** 3、父类引用数据类型变量指向子类对象

  注:这三个规格而满足,当你调基类里叫还写的方式的时段,实际中 new
的凡谁子类对象,就调用子类对象里之法子。

 

 

 

访问控制: 

Java权限修饰符 public protected private
置于类的分子定义前,用来限制其他对象对该类对象成员的访问权限。

private:类内部

default:类中、同一个保险

protected:类里、同一个确保、子类

public:类里、同一个担保、子类、任何地方

* 对于 class 的权柄修饰只堪就此 public 和 default,public
类可以在随意地方让聘,default 类只可以吃和一个管教里面的类看。

 

 

 

 

办法的重载与重写:

重载是暨一个好像下面,相同的法门名、不同的参数列表(个数或项目),与归值类型无关。

重写是子类重新定义父类已部分艺术,必须与父类方法有同样之回来值类型、方法名、参数列表。

*
重写的方式无可知利用于让重复写方法更严格的拜访权限,也就是说要您重新写的父类的办法的拜会权限是
protected ,那么您子类重写的主意的走访权限就非可知是 private 或
default,只能是 protected 或 public。

 

 

 

 

后续中之构造方法: 

* 子类组织的历程遭到须调整用那基类的构造方法。

* 子类可以当融洽之构造方法中应用 super(argument_list)
调用基类的构造方法。

  ** 使用 this(argument_list) 调用本类另外的构造方法

  ** 如果调用
super,必须写在子类构造方法的率先履,说白了不畏只要先行构造出大才见面时有发生儿子,故置第一尽。

* 如果子类的构造方法中没显得地调用基类的构造方法(也便说没有写
super),则Java会默认调用基类无参的构造方法。

*
如果子类构造方法中既无显得地调用基类的构造方法,而基类中并且从不任由参的构造方法,则编译出错。

 

 

 

Object 类之 equals 方法: 

Object类的equals方法的兑现代码如下:

boolean equals(Object o){

    return this==o;

}

* Object 类中定义来:public boolean equals(Object obj)
方法,该法提供定义对象是不是“相等”的逻辑。

* Object 的 equals 方法定义也:x.equals(y) 当 x 和 y
是同一个对象的援时回来 true,否则回 false。

* J2SDK 提供的组成部分近似,如 String、Date 等,重写了 Object 类的 equals
方法,调用这些近似的 equals 方法,x.equals(y),当 x 和 y
所引用的靶子是相同类对象都性能之情节等时(并不一定是同样对象),返回
true,否则回 false。

* 可以根据需要以用户从定义类型中更写 equals 方法,这时你吧该将
hashCode 方法一致并重写。

 

 

 

目标转型(casting): 

* 一个父类的援类型变量可以“指向”其子类的目标。

*
一个父类的援类型变量不得以看该子类对象新加的性能(包括静态属性与动态性)。

* 可以应用 引用类型变量 instanceof 类名
来判断该引用类型变量所“指向”的对象是否属此类或该类的子类。

  ** instanceof:是某类或者该子类的实例之一。

*
子类的目标足以作为父类的靶子来用,称作向上转型(upcasting),反的称为向下转型(downcasting)。

但扩展性(extensibility):

*
一个超人的平整就是,在长新物的还要尽量的绝不失去窜原来已经办好的物,这个才吃可扩展性好。

 

 

 

抽象类(abstract): 

* 用 abstract 修饰的类叫抽象类,用 abstract 修饰的主意给抽象方法。

* 抽象类不能够让实例化。

* 抽象方法才需要声明,而无待兑现。

*
含有抽象方法的类似必须叫声称也抽象类,抽象类必须让连续(说的是,若您定义了一个抽象类,该类不让另外类继承的说话就不曾意思,因为虚无类不可知实例化,所以若无法使用该抽象类吃的静态和动态性),继承抽象类的子类必须另行写该抽象父类中负有的空洞方法

* 补充说明:abstract class 中好生未抽象方法,而 interface 不得以。

 

 

 

final 关键字: 

* final 的变量的价未可知叫更改,且要初始化。

  ** final 的成员变量

  ** final 的一部分变量(形参)

* final 的方式不可知于重复写

* final 的类似不克给接续

 

 

接口(interface): 

* 接口是空虚方法以及常量值的定义的聚众。

*
从本质上说,接口是千篇一律种植特有之抽象类,这种肤浅类吃只有含常量、方法的概念,而并未变量,没有办法的贯彻。

* 多个无关之近乎可以实现与一个接口。

* 一个好像可兑现多独无关的接口。

* 与后续关系近乎,接口和实现类似中在多态性。

* 补充说明:interface 只能 extends interface ,不能够 extends class 或者
extends abstract class ,interface 本身不克 implements 任何 interface

 

 

 

总结:

* 内存分析贯穿始终

* 对象和接近的定义

* 类(对象)之间的关联

* 面向对象设计思想

* class

* new

  ** 引用的定义

  ** 构造方法的概念

* 方法重载(overload)

  ** 构造方法重载

* this

* static

* package & import

* private default protected public(default不是生死攸关字)

* extends

* overwrite

* final

* Object

  ** toString

  ** equals

* upcasting downcasting

* polymophysm / ( dynamic / late ) binding

* abstract class

* interface

  ** implements