您的位置:首页 > 编程语言 > Java开发

Java培训总结笔记(一)

2016-11-26 23:18 369 查看

一.Java概述

1. Java语言的起源和发展

1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0)。

2009年,Oracle(甲骨文)公司宣布收购Sun。

2. Java虚拟机及跨平台原理

Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境。简单地说,写好java代码,保存到硬盘中,javac会使你的代码编译成字节码(.class),在eclipse等IDE中保存代码时会自动完成上述工作;之后,JVM将字节码转化成CPU的机器码(.java),CPU执行机器码,完成编译过程。

3. 应用领域

- Web服务器

- Android应用程序以及Framework层开发

- 中间件开发(可复用软件模型,位于操作系统与应用程序之间)

4. Java不同版本

- Java SE 标准版,适用于普通应用程序的开发

- Java EE 企业版,适用于大型企业级应用程序开发

- Java ME 微型版,适用于移动设备或嵌入式设备的程序开发(比如早期诺基亚手机上的应用程序)

5. HelloWorld程序分析

public class hello{
//public为公共属性,指公开给其他类存取;class为类声明;hello为类的名称
public static void main(String[] args){
//static为静态变量,指类变量;void代表没有返回值;String[] args,必须要传String的数组给此方法省参数,命名为args
System.out.println("Hello World!");
//打印到标准输出上,快捷键为sout+alt+/;每一行都要以;结尾
}
}
**


6. Java类和对象的概念

类代表抽象数据类型,在Java中所有东西都属于某个类,真正被执行的是类。

对象可以当作实例,由实例变量和方法组成。

类是对象的蓝图,类不是对象,却是用来创建对象的模型。比如说,动物是个类,猫猫狗狗就是它的对象。

7. Java类库及其组织结构

Java官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。

可参考官方说明文档:http://www.oracle.com/technetwork/java/api/index.html

二.Java语法基础

1. 基本类型占用的字节数

boolean由JVM决定

char 16bits

byte 8bits、short 16bits、int 32bits、long 64bits

float 32bits、double 64bits

2. 数组的注意事项

数组也是个对象,数组中的元素无论是primitive主数据类型还是对象引用,数组都是个对象。一旦数组被声明出来,就只能装入所声明类型的元素。

声明格式举例:

int[] nums;
nums= new int [7];
//也可直接写成int[] nums=new int[7];


3. 字符串类型String

String类并不等同于字符串,而是一个字符串容器。

字符串是常量,值一旦创建不能更改;而String类的引用可以指向不同的字符串。

三.Java类与对象

1. 类的定义与实例化

类的定义:

- 变量(域、属性)

[权限修饰符][变量类型][变量名];


-构造函数(必须有)

//括号内可以声明参数
[权限修饰符][类名] (){
}


-方法(函数)

//括号内可以声明参数
[权限修饰符][返回值类型][方法名] (){
}


-初始化块(分为非静态和静态)

{
//需要初始化的数据
}


类的实例化(创建对象):

new [类名] ()


2. 访问修饰符

按权限从小到大的顺序,有以下4种访问修饰符:

- private:私有访问权限,只能在同一个类中访问

- default:默认访问权限(一般省略不写),可以在同一个包中访问

- protected:受保护的访问权限,可在同一个包中及不在同一个包的子类中访问

- public:公有访问权限,可在不同类和不同包中访问,即全局范围内,任何位置都可以

3. 变量的作用域

分为全局变量和局部变量,在Java中,全局变量作用于整个类,局部变量作用于类中的某个方法函数或是某个子类。要注意,全局变量在类中定义,不需要初始化,系统会自动赋值,局部变量则必须初始化。

4. this关键字

主要有以下三个作用:

- this调用本类中的属性,也就是类中的成员变量

- this调用本类中的其他方法

- this调用本类中的其他构造方法,调用时要放在构造方法的首行

5. 方法重载

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用时注意格式规范:方法名一定相同,参数表一顶不同,返回值类型可以不同。

6. 内存模型及运行机制

从逻辑上讲,可分为方法区、堆、栈、寄存器。

- 方法区:存放类信息、常量池、静态数据。

- 堆:存放new出的对象且成员变量存放在堆中。

- 栈:局部变量存放在栈中。

- 寄存器:用于计算寻址。

再用一张图片理解(图源网络),如下:



四.Java继承与多态

1. 继承的概念与实现

概念:简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法的方式,产生一个新的类型。

实现:

 //使用extends关键字实现
[修饰符] class [子类名] extends [父类名]{
}


注意:类不支持多继承;一个类可以被多个子类继承。

2. 方法覆盖(重写)

当从父类继承的某些方法不满足子类的要求时,需要重写实现。

要注意:子类的方法的返回类型、名称、参数要和父类完全一样;子类覆盖父类方法,可以修改作用域修饰符,但只能把方法的作用域放大。

实现:在子类方法前加 @Override

3. super关键字

super关键字只能用于在子类中调用父类被覆盖的方法或实例变量。

具体分为以下三种用法:

- 在子类构造方法调用父类的构造方法时,用super(参数列表)的方式,且要写在子类构造方法体的首行。

- 当子类局部变量覆盖父类的成员变量时,若想调用父类成员变量,用”super.成员变量名”。

- 当子类的成员方法覆盖父类的成员方法时,若想调用父类成员方法,用“super.方法名(参数列表)”。

4. instanceof运算符

instanceof是一个二元运算符,用于检测左边的对象是否为右边的类或其子类的实例,或者检测左边的类是否为右边的类的子类,返回值为boolean类型。

实现:

[对象]/[类名] instanceof [类名]


5. static关键字及调用注意事项

static表示“静态”或“全局”,用来修饰成员变量和方法,使其独立于该类的对象,可以理解为类的变量和方法,可以通过类名直接访问。

注意事项:在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

6. final关键字

简单讲final有三种用法,分别是修饰类、方法和变量,如下:

- 修饰类:表示被修饰的类不能被继承,同时类中的成员方法被隐式指定为final方法,但成员变量不变,可根据需求设置。

- 修饰方法:可防止被修饰的方法在子类中被覆盖,该方法不能被重写。

- 修饰变量:修饰primitive主数据类型时,变量的数值在初始化后则不能再更改;修饰引用类型的变量时,初始化后再不能再指向其他的对象。

7. Object类

Object类是Java中所有类公共的父类,一个类如果没有继承另一个类,则一定是Object类的子类。Object类在编译器自动导入的Java.lang包中,提供了许多方法。

比如toString方法,以某种形式输出一个对象;

再比如==和equals方法,需要注意的是==是判断两个变量引用的是否是同一个对象,equals是判断两个对象的内容是否相同。

8. String的存储方式

第一种:String str1=”abc” 引用str1存放在栈区,字符串常量”abc”存放在方法区的常量池中。

第二种:String str2=new String(“abc”) 引用str2同样存放在栈区,先在方法区内查找是否有该字符串常量,如果没有会先在方法区创建一个常量,同时在堆区开辟一块内存存放一个新的String类对象用来存储字符串常量,如果有该常量同样会在堆内开辟一块内存存放相同的常量,引用str2最后引用的是堆里的常量。

五.面向对象高级特性

1. 内部类的分类

- 成员式内部类

- 局部内部类

- 匿名内部类

- 静态嵌套类

2. 内部类的实例化及访问规则

共性:定义在类中的类,作为外部类中的一个成员,可以直接访问其外部类中的数据(包括私有数据),可以对同一个包中的其它类进行隐藏(使用private修饰)。

实现:

public class Outer{
class Inner{
}
}


差别:

- 成员式内部类:直接在外部类中定义(不在方法内部或代码块内部)。

- 局部内部类:在方法内部或方法内部定义。

- 匿名内部类:不给定引用该内部类实例的变量。

- 静态嵌套类:可以定义静态或者非静态的成员,但从技术上讲其实并不属于内部类。

3. 抽象类概念和使用

概念:使用abstract关键字声明的类,表示修饰的类没有完全实现,不能实例化。在某些情况下,父类知道子类应该包含哪些方法,但是不知道方法子类是如何实现的,此时应声明抽象类。

使用:

//使用abstract关键字实现
[修饰符] abstract class [类名]{
//抽象方法(没有方法体)
[访问修饰符] abstract [返回值类型] [方法名] ();
//其它非抽象方法或成员变量的定义
}


注意事项:

- 抽象类并不能用来实例化。

- 抽象类有构造函数。

- 抽象类的构造函数是给子类使用的。

4. 接口概念和使用

概念:最高层次的抽象;规定做什么,但是不规定怎么做;接口是一种特殊的抽象类。

规范:

[修饰符] interface [接口名] {
//接口中所有的方法必须是抽象方法
}
//接口可以多继承,每个接口名之间用英文逗号隔开
[修饰符] interface [接口名] extends [接口名1],[接口名2],...{
}


实现:

//可以多实现,每个接口名之间用英文逗号隔开
[修饰符] class [类名] implements [接口名1],[接口名2],...{
}


注意事项:

- 接口中的所有成员变量默认使用 public static final 修饰(可省略)。

- 接口中的所有方法默认使用 public abstract 修饰(可省略)。

- 接口中没有构造函数。

- 接口可以继承,并且可以多继承。

5. 匿名内部类的使用

匿名内部类只能使用一次,一般用来简化代码编写,而且在使用时必须继承一个父类(抽象类)或实现一个接口。

实现:

new 父类(参数列表)||实现接口(){
//匿名内部类的类体部分
}


6. 多态的使用

定义:同种事物的不同表现形态。

产生:声明变量的类型和该变量的实际对象不一致。

前提:要有继承关系;要有方法重写。

优点:有助于面向接口编程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: