JDK java软件开发工具包
包括java运行环境,java开发工具,java基础的类库
bin 存放java各种可执行文件
jre java运行环境
lib jdk所需要的一些资源文件和资源包
helloworld背后的故事
1.编写代码
2.编译
机器不认识我们写的代码,需要进行编译成字节码,编译后的文件叫做class文件
3.类装载ClassLoader
执行程序寻找和装载所需要的类
4.字节码校验(byte-code)
对class文件的代码进行校验,保证代码的安全性
5.解释(Interpreter)或者JIT(just in time,java即时编译)
可是机器也不能认识class文件,还需要被解释器进行解释,或者是通过即时编译成为本地机器码,机器才能最终理解我们所表达的东西
6.运行
最后由环境对代码进行运行
开发期=====编译期=======运行
虚拟机的功能
(1)通过classloader寻找和装载class文件
(2)解释字节码成为指令并执行,提供class文件的运行环境
(3)进行运行期间垃圾回收
(4)提供与硬件交互的平台
所有与平台有关的东西都是由虚拟机去处理
java技术三大特性
(1)垃圾回收
(2)安全性
(3)虚拟机
for和while
for 如果用于控制循环的增量定义for语句中,那么该变量只在for语句内有效(节省内存)
for和while可以互换。如果需要定义循环增量,用for更为合适
break与continue
break语句 应用范围为选择结构和循环结构
continue语句:应用于循环结构,特点为结束本次循环,继续下一次循环
break与continue单独存在,下面有任何语句,都执行不到。
函数
修饰符 返回值类型 函数名(参数类型 形式参数){
执行语句;
return 返回值;
}
当函数的返回值类型为void时,函数中return语句省略不写。
&和&&
&无论左边是true是false,右边都运算。
&&当左边为false时,右边不运算。
|和||
|两边都参与运算。
||当左边为true,右边不运算。
位运算符
<<其实就是乘以2的移动的位数次幂(向左移)
>>就是除以2的移动的位数次幂
最高位补什么有原来的数据最高值而定
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1补空位
面向对象
什么是类
类是用来描述对象的。由于对象是虚拟出来的东西,是看不见摸不着的,我们需要在程序中使用对象,就需要用一种方式来描述对象,然后根据这个描述来创建对象。
类和对象的关系
对象是类的实例,类是对象的抽象。
怎么定义类
将一系列特征相似的对象的共同特征及行为抽取出来进行描述,写在一个class中,用成员变量描述对象的特征,用成员方法来描述对象的行为。
怎么使用类创建对象
使用new关键字和指定类名来创建一个对象。
对象的产生
Person p = new Person();
先在堆内存中创建了一个对象,然后栈内存中创建一个变量引用了对象的地址。
static关键字
static关键字用来修饰类的成员,被这个关键字修饰的成员都和类加载有关。
JVM运行时不会将所有类加载到内存,因为无法确定程序中要使用哪些。类在第一次使用时加载,只加载一次。
静态变量
用static修饰的变量就是静态变量。
静态变量在类加载后就初始化。
静态变量被类的所有实例所共享。
静态变量可以使用 类名.变量名 形式访问。
如果在定义一个类的时候,发现一个成员变量需要被所有实例所共享,那么这个成员变量就需要定义为 static 的。
静态方法
用 static 修饰的方法就是静态方法。
静态方法在类加载后就可以使用。
静态方法可以使用 类名 . 方法名 形式访问。
静态方法不能直接访问外部非静态成员。
因为外部非静态成员必须在类创建对象之后才能使用,而静态方法可以在没创建对象时就使用。
如果要在静态方法内部访问外部非静态成员,需要先创建该类对象,通过对象访问。
静态方法中不能使用 this关键字。
因为 this 是个引用,哪个对象调用方法就引用哪个对象。 而静态方法有可能不是被对象调用的, this 无从引用。
如果一个方法不用访问对象的非静态成员,那么就可以定义为静态的,这样使用者就不需要创建对象,直接用类名调用。
静态方法通常是作为工具方法或者一个可以产生对象的方法被声明,目的是为了让调用者更方便的使用,不必创建对象。
静态代码快
用 static 修饰的代码块就是静态代码块。
静态代码块在类加载后执行。
静态代码块和静态方法相同,不能使用外部非静态成员。
静态代码块执行和静态变量的初始化顺序由代码从上到下顺序决定
静态内部类
用 static 修饰的内部类就是静态内部类。
静态内部类在类加载后就可以创建对象,无需创建外部类对象
向上转型
把一个子类当做父类来用是可以的,因为父类有的子类都有
把一个父类当做子类来用就不可以了,因为子类有的父类不一定有
可以定义一个父类类型的变量来记住子类对象,这在程序中称之为向上转型
强制类型转换
把一个子类当做父类来用的时候,不能调用子类特有方法。
因为编译时编译器会做语法检查,看到变量是父类类型那么就会到父类中查找是否有该方法,没有则报错。
这种情况下,就需要强制类型转换,将父类类型强转成子类类型。
以 ( 子类名 ) 变量名 形式进行强制类型转换
强制类型转换时,无论类型是否匹配编译都不会报错,但如果类型不匹配运行会报错,我们可以使用 instanceof 进行判断,编译时预知错误。
在子类当做父类来用时,不能调用特有方法,如果一定要调用,就需要强制类型转换回子类。在做转换时最好 instanceof 判断一下类型是否匹配。
重载( Overload)和重写( Override)的区别:
重载是方法名相同,参数列表不同,和返回值类型无关。
重写是方法名、参数列表、返回值类型全相同。
类中内部类
内部类必须创建外部类对象才能使用。
创建内部类对象时必须先创建一个外部类对象,通过一个外部类对象才能创建内部类对象。
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
内部类可以直接访问外部类的成员,而外部类不能直接访问内部类的成员。访问方式:外部类名.this.成员名
内部类可以访问外部类成员,因为在使用内部类时一定会有外部类对象,且只对应一个。
外部类不能访问内部类成员,因为在使用外部类时有可能还没有创建内部类对象。
如果一定要在外部类中使用内部类成员,那么需要创建内部类对象,通过对象来访问。
内部类中不能定义静态成员。
因为内部类需要创建外部类对象才能使用,static的本意是不创建对象就能使用,这是矛盾的。
内部类的class文件名为:外部类名.内部类名.class
方法内部类
如果一个类只使用一次 ,那么可以定义为匿名内部类。
使用 new 父类名 (){ 类定义 } 形式声明,先创建一个指定类的子类,然后根据这个类创建一个对象。
匿名内部类的 class 文件名为:外部类名 $ 编号 .class。
静态内部类
可以使用 static修饰一个类中的内部类。
静态内部类不用创建外部类对象就可以直接创建对象。
外部类名 . 内部类名 变量名 = new 外部类名 . 内部类名 ();
静态内部类可以定义静态成员。
因为静态内部类可以直接使用,无需创建外部类对象。
静态内部类中不能访问外部非静态成员。
因为创建静态内部类不需要外部类对象,也就是有可能没有创建外部类对象,使用外部类成员必须有外部类对象
接口和抽象类
抽象类用 extends继承,接口用 implements实现
抽象类中的变量和方法没有默认修饰符,接口中的变量默认为 public static final的,接口中的方法默认为 public abstract
一个类只能继承一个抽象类,一个类可以实现多个接口
异常
Throwable
Throwable表示Java中可被抛出的对象,它是所有错误和异常的父类
Throwable有两个子类:Error、Exception
Error表示错误
Exception表示异常
RuntimeException表示运行时异常,是Exception的子类
异常的分类
Error(错误)
由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不进行处理
Exception(异常)
所有异常类的父类,子类定义了各种各样可能出现的异常事件,一般需要用户显式地声明向外抛出或捕获。
Runtime Exception(运行时异常)
一类特殊的异常,如被0除、数组角标越界等。产生比较频繁,处理麻烦,如果每次都处理,会对程序可读性和运行效率影响比较大,因此由系统检测并将它们交给缺省的异常处理程序,用户不必对其进行处理。这类异常不处理,编译时不会报错,只是在运行时出现错误时才报告异常,所以我们称之为运行时异常,所有RuntimeException的子类都是运行时异常。我们也可以对运行时异常进行处理。
编译时异常
Exception中除了RuntimeException的子类,其他异常都是必须要处理的,如果不处理,编译时会报错,这些异常我们称之为编译时异常。
异常的用法
处理异常
在程序中可以在方法后面使用throws关键字声明向外抛出异常
对于编译时异常,通常我们需要使用try……catch语句进行捕获
finally可以结合try……catch使用,出现异常,finally里面的代码也会执行
异常的一些细节
如果父类方法中声明抛出多个异常,那么重写(覆盖)该方法只能抛出那些异常的一个子集,也就是说子类不能比父类抛出更多的异常。
如何处理多个异常
try语句与finally的嵌套使用
自定义异常
可以通过继承Exception类来自定义一个异常
如果要定义一个运行时异常则需要继承RuntimeException类
throw和throws的区别
throws使用在函数上,后面跟着的异常类,可以跟着多个,用逗号隔开
throw使用在函数内,后面跟着的异常对象
线程
创建线程的第二种方式:继承Thread类
步骤
1.定义类继承Thread类
2.复写Thread类中的run方法
3.调用线程的start方法
创建线程的第二种方式:实现Runnable
步骤
1.定义类实现Runnable接口
2.覆盖Runnable接口的run方法
3.将runnable接口的子类对象作为实际参数传递给thread类的构造函数
4.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
同步代码块
synchronized()对象{
需要被同步的代码
}
对象如同锁,持有锁的线程可以在同步中执行.
同步的前提
必须要有两个或者两个以上的线程。
必须是多个线程使用同一个锁。
如果同步函数被静态修饰后,使用的锁是什么?
通过验证,发现不再是this,因为静态方法中不可以定义this.
静态进内存,内存中没有类对象,但是一定有该类对应的字节码文件对象。
类名.class 该对象的类型是class
静态的同步方法,使用的锁是该方法所在的字节码文件对象。类名.class
集合
集合接口
Collection接口
一个独立的元素的序列,这些元素服从一条或多条规则
Collection接口下主要分为List集合和Set集合
List集合的特点是元素有序、允许有重复元素
Set集合的特点是元素无存储顺序、不允许有重复元素
Map接口
一组成对的”键值对”对象,允许根据键来查找值
Map集合的键不允许有重复,所以Map的所有键构成了一个Set集合
Iterable接口
JDK1.5新定义的接口作为Collection的父接口
主要为了实现增强for循环
List
List特点
元素有序,可重复。
我们主要学习三种:ArrayList、Vector、LinkedList
这三种都是List接口的实现类,使用上完全一样,只是实现原理不同,效率不同。
ArrayList
底层数组实现
查找快,增删慢
线程不安全
Vector
与ArrayList基本一样
线程安全(线程同步),效率低
LinkedList
底层链表实现
增删块,查找慢
存取元素
List集合元素存取方法一致
使用add()方法增加元素
由于List集合有序,可以使用get()方法获取元素
元素的迭代(Iterator)
通过集合对象的iterator()方法获得迭代器Iterator
通过Iterator迭代器的hasNext()方法判断是否存在下一个元素
通过Iterator迭代器的next()方法获取下一个元素
元素的迭代(Enumeration)
迭代Vector集合中的元素可以使用Enumeration
通过Enumeration的hasMoreElements()方法判断是否还有元素
通过Enumeration的nextElement()方法返回下一个元素
Set
Set集合无序,不允许有重复元素
Set集合通过存入对象的equals方法来保证集合中没有重复元素
HashSet
HashSet是Set的子类,因此也没有重复元素
底层使用哈希算法保证没有重复元素
存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。
如果没有哈希值相同的对象,直接存入。
如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。
equals()方法比较结果相同则不存,不同就存入。
往HashSet集合里存储的对象必须正确重写hashCode和equals方法
TreeSet
TreeSet集合通过二叉树算法保证无重复元素,并对元素进行排序
在使用TreeSet时必须指定比较的算法,指定的方式有两种:
自然顺序:将要存储的类实现Comparable接口,重写compareTo方法,在方法中指定算法
比较器顺序:在创建TreeSet时,传入一个比较器Comparator,在比较器的compare方法中指定算法
Map
Map集合的特点
Map存储了一系列键值的映射关系
Map集合需要保证键的唯一性
可以通过键获得值,反之则不能
Map集合存储元素使用put(key,value)方法
Map集合的两种遍历方式
通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,再调用get方法根据键拿到值
通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,通过getKey方法拿到键,通过getValue方法拿到值。
HashMap
线程不安全,存取速度快,允许存放null键,null值。
通过HashSet原理保证键唯一性
Hashtable
线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
TreeMap
通过二叉树算法保证键唯一性
对键进行排序,排序原理与TreeSet相同。
Properties
HashTable的子类,所以也是线程安全的
用于读写配置文件的,一般配置项等号两边都是String,所以该集合中的两列保存的都是String类型的数据
这个集合中只能存String,所以不需要定义泛型。
分享到:
相关推荐
【Java程序员年终总结】 作为一名Java程序员,我在2010年的经历让我深刻理解到学习的重要性。从初入职场的新鲜人,到能在公司独立完成项目的开发者,这段历程充满了挑战和成长。2010年,我有幸加入北京联合兴辰公司...
16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16.java总结.zip16....
java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典问题总结java经典...
1. **Java语法基础**:包括变量声明、数据类型(基本类型和引用类型)、运算符、流程控制(如if语句、switch语句、for循环、while循环)、异常处理(try-catch-finally语句块)。 2. **面向对象编程**:这是Java的...
Java后端核心知识总结:JVM篇 Java后端核心知识总结:并发编程篇 Java后端核心知识总结:MySQL篇 Java后端核心知识总结:Redis Java后端核心知识总结:RabbitMQ Java后端核心知识总结:Kafak Java后端核心知识总结:...
Java 详细总结(精辟版++) Java 概述 Java 是一种面向对象的编程语言,主要应用于桌面程序、控制台程序、企业级开发和嵌入式开发等领域。Java 分为三个主要分类:Java SE、Java EE 和 Java ME。Java SE 主要用于...
这篇“Java技术总结”将深入探讨Java的核心概念、语法特性、开发工具以及相关框架,旨在为学习者提供一个全面且深入的Java知识体系。 一、Java语言基础 Java是一种面向对象的编程语言,由Sun Microsystems(现已被...
有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结
Java核心技术总结 Java是一种面向对象的编程语言,它的核心技术包括Java虚拟机(JVM)、Java核心技术、Java并发编程、计算机网络等。以下是Java核心技术的总结: 一、Java虚拟机(JVM) Java虚拟机(JVM)是Java ...
java学习java学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料总结.zipjava学习资料...
北大青鸟 S1 Java 知识要点总结 本文总结了 Java 语言的基础知识点,涵盖了 Java 语言的基本概念、变量、数据类型、运算符、IDE 的使用、环境变量的配置等方面。 Java 基础概念 * 程序是一系列指令的集合,旨在...
1. Java基础语法 - 关键字:Java中的关键字,如`class`, `extends`, `implements`, `public`, `private`, `protected`, `import`, `final`等,用于构建Java程序。 - 数据类型:Java的基本数据类型包括`byte`(字节...
1. **J2EE(Java 2 Platform Enterprise Edition)**,适用于开发企业级Web应用程序,包括Servlet和JSP等技术。 2. **J2SE(Java 2 Platform Standard Edition)**,是标准版,用于开发桌面应用程序,如简单的游戏...
java知识点总结 一、Java 概述 Java 语言的发展始于 1991 年,由 Sun 公司的 James Gosling 等人开始开发,最初命名为 Oak,旨在用于控制嵌入在有线电视交换盒、PDA 等的微处理器。1994 年更名为 Java。Java 语言...
java 数据结构总结的思维导图笔记,个人做的非常全,需要的自行下载
java学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zipjava学习路线总结.zip...