java基础
2020-11-04 14:34:41 1 举报
AI智能生成
java
作者其他创作
大纲/内容
Java 开发环境配置
安装jdk
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
配置环境变量
我的电脑",点击"属性",选择"高级系统设置";
测试
cmd命令java -version出现版本信息说明配置成功
Eclipse
public class HelloWorld {<br> public static void main(String[] args) {<br> System.out.println("Hello World");<br> }<br>}控制台输出Hello World测试成功
工具下载地址: http://www.eclipse.org/downloads/packages/
IDEA测试
public class HelloWorld {<br> public static void main(String[] args) {<br> System.out.println("Hello World");<br> }<br>}控制台输出Hello World测试成功
工具下载地址:https://www.jetbrains.com/idea/download/
Java 基础语法
Java 基础语法<br>
对象:对象是类的一个实例,有状态和行为。
类:类是一个模板,它描述一类对象的行为和状态。
方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。<br>
基本语法
大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。<br>
Java 标识符
所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始<br>首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合<br>关键字不能用作标识符<br>标识符是大小写敏感的<br>合法标识符举例:age、$salary、_value、__1_value<br>非法标识符举例:123abc、-salary
Java修饰符<br>
访问控制修饰符 <br>
default
public
protected
private
非访问控制修饰符
final
abstract
static
synchronize
Java 变量
局部变量
在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
类变量
类变量也声明在类中,方法体之外,但必须声明为 static 类型。
成员变量
成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
Java 数组
Java 枚举
Java 关键字
访问控制
private 私有的<br>protected 受保护的<br>public 公共的<br>default 默认
类、方法和变量修饰符
abstract 声明抽象<br>class 类<br>extends 扩充,继承<br>final 最终值,不可改变的<br>implements 实现(接口)<br>interface 接口<br>native 本地,原生方法(非 Java 实现)<br>new 新,创建<br>static 静态<br>strictfp 严格,精准<br>synchronized 线程,同步<br>transient 短暂<br>volatile 易失
程序控制语句
break 跳出循环<br>case 定义一个值以供 switch 选择<br>continue 继续<br>default 默认<br>do 运行<br>else 否则<br>for 循环<br>if 如果<br>instanceof 实例<br>return 返回<br>switch 根据值选择执行<br>while 循环
错误处理
assert 断言表达式是否为真<br>catch 捕捉异常<br>finally 有没有异常都执行<br>throw 抛出一个异常对象<br>throws 声明一个异常可能被抛出<br>try 捕获异常
包相关
mport 引入<br>package 包
基本类型
boolean 布尔型<br>byte 字节型<br>char 字符型<br>double 双精度浮点<br>float 单精度浮点<br>int 整型<br>long 长整型<br>short 短整型
变量引用
super 父类,超类<br>this 本类<br>void 无返回值
保留关键字
goto 是关键字,但不能使用<br>const 是关键字,但不能使用<br>null 空
Java注释<br>
Java 空行
继承
接口
Java 源程序与编译型运行区别
子主题
Java 对象和类
多态<br>继承<br>封装<br>抽象<br>类<br>对象<br>实例<br>方法<br>重载
Java中的对象
对象都有自己的状态和行为。
Java 中的类
类可以看成是创建 Java 对象的模板。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。<br><br>在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
创建对象<br>
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。
访问实例变量和方法
通过已创建的对象来访问成员变量和成员方法,如下所示:<br><br>/* 实例化对象 */<br>Object referenceVariable = new Constructor();<br>/* 访问类中的变量 */<br>referenceVariable.variableName;<br>/* 访问类中的方法 */<br>referenceVariable.methodName();
Java 基本数据类型
内置数据类型
byte
short
int
long
float
double
char
String
引用类型<br>
在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象, 指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型, 比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。<br>对象、数组都是引用数据类型。<br>所有引用类型的默认值都是null。<br>一个引用变量可以用来引用任何与之兼容的类型。
Java 常量<br>
在 Java 中使用 final 关键字来修饰常量,声明方式和变量
自动类型转换
低 ------------------------------------> 高<br><br>byte,short,char—> int —> long—> float —> double
强制类型转换<br>
1. 条件是转换的数据类型必须是兼容的。<br><br>2. 格式:(type)value type是要强制类型转换后的数据类型
隐含强制类型转换<br>
1. 整数的默认类型是 int。<br><br>2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
Java 数据结构
枚举
位集合
向量
栈
字典
哈希表
属性
Java 集合框架
1 Collection 接口<br>Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。<br><br>Collection 接口存储一组不唯一,无序的对象。<br><br>2 List 接口<br>List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。<br><br>List 接口存储一组不唯一,有序(插入顺序)的对象。<br><br>3 Set<br>Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。<br><br>Set 接口存储一组唯一,无序的对象。<br><br>4 SortedSet<br>继承于Set保存有序的集合。<br>5 Map<br>Map 接口存储一组键值对象,提供key(键)到value(值)的映射。<br><br>6 Map.Entry<br>描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。<br>7 SortedMap<br>继承于 Map,使 Key 保持在升序排列。<br>8 Enumeration<br>这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。
Set和List的区别
1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。<br><br>2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。<br><br>3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
集合实现类(集合类)
1 AbstractCollection <br>实现了大部分的集合接口。<br>2 AbstractList <br>继承于AbstractCollection 并且实现了大部分List接口。<br>3 AbstractSequentialList <br>继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。<br>4 LinkedList<br>该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。例如:<br><br>List list=Collections.synchronizedList(newLinkedList(...));<br>LinkedList 查找效率低。<br><br>5 ArrayList<br>该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。<br><br>6 AbstractSet <br>继承于AbstractCollection 并且实现了大部分Set接口。<br>7 HashSet<br>该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。<br><br>8 LinkedHashSet<br>具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。<br>9 TreeSet<br>该类实现了Set接口,可以实现排序等功能。<br><br>10 AbstractMap <br>实现了大部分的Map接口。<br>11 HashMap<br>HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。<br>该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。<br>12 TreeMap<br>继承了AbstractMap,并且使用一颗树。<br>13 WeakHashMap<br>继承AbstractMap类,使用弱密钥的哈希表。<br>14 LinkedHashMap<br>继承于HashMap,使用元素的自然顺序对元素进行排序.<br>15 IdentityHashMap<br>继承AbstractMap类,比较文档时使用引用相等。
集合算法
集合框架定义了几种算法,可用于集合和映射。这些算法被定义为集合类的静态方法。<br><br>在尝试比较不兼容的类型时,一些方法能够抛出 ClassCastException异常。当试图修改一个不可修改的集合时,抛出UnsupportedOperationException异常。<br><br>集合定义三个静态的变量:EMPTY_SET,EMPTY_LIST,EMPTY_MAP的。这些变量都不可改变。
如何使用迭代器
通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。<br><br>一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或 ListIterator接口。<br><br>迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了 Iterator,以允许双向遍历列表和修改元素。
遍历 ArrayList
import java.util.*;<br> <br>public class Test{<br> public static void main(String[] args) {<br> List<String> list=new ArrayList<String>();<br> list.add("Hello");<br> list.add("World");<br> list.add("HAHAHAHA");<br> //第一种遍历方法使用 For-Each 遍历 List<br> for (String str : list) { //也可以改写 for(int i=0;i<list.size();i++) 这种形式<br> System.out.println(str);<br> }<br> <br> //第二种遍历,把链表变为数组相关的内容进行遍历<br> String[] strArray=new String[list.size()];<br> list.toArray(strArray);<br> for(int i=0;i<strArray.length;i++) //这里也可以改写为 for(String str:strArray) 这种形式<br> {<br> System.out.println(strArray[i]);<br> }<br> <br> //第三种遍历 使用迭代器进行相关遍历<br> <br> Iterator<String> ite=list.iterator();<br> while(ite.hasNext())//判断下一个元素之后有值<br> {<br> System.out.println(ite.next());<br> }<br> }<br>}<br>
遍历 Map
import java.util.*;<br> <br>public class Test{<br> public static void main(String[] args) {<br> Map<String, String> map = new HashMap<String, String>();<br> map.put("1", "value1");<br> map.put("2", "value2");<br> map.put("3", "value3");<br> <br> //第一种:普遍使用,二次取值<br> System.out.println("通过Map.keySet遍历key和value:");<br> for (String key : map.keySet()) {<br> System.out.println("key= "+ key + " and value= " + map.get(key));<br> }<br> <br> //第二种<br> System.out.println("通过Map.entrySet使用iterator遍历key和value:");<br> Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();<br> while (it.hasNext()) {<br> Map.Entry<String, String> entry = it.next();<br> System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());<br> }<br> <br> //第三种:推荐,尤其是容量大时<br> System.out.println("通过Map.entrySet遍历key和value");<br> for (Map.Entry<String, String> entry : map.entrySet()) {<br> System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());<br> }<br> <br> //第四种<br> System.out.println("通过Map.values()遍历所有的value,但不能遍历key");<br> for (String v : map.values()) {<br> System.out.println("value= " + v);<br> }<br> }<br>}
如何使用比较器
TreeSet和TreeMap的按照排序顺序来存储元素. 然而,这是通过比较器来精确定义按照什么样的排序顺序。<br><br>这个接口可以让我们以不同的方式来排序一个集合。<br><br>序号 比较器方法描述<br>1 使用 Java Comparator<br>这里通过实例列出Comparator接口提供的所有方法
Java ArrayList
ArrayList类是一个可以动态修改的副本,与普通副本的区别就是它是没有固定大小的限制,我们可以添加或删除元素。<br><br>ArrayList继承了AbstractList,并实现了List接口
添加元素
ArrayList 类提供了很多有用的方法,添加元素到 ArrayList 可以使用 add() 方法:
访问元素
访问 ArrayList 中的元素可以使用 get() 方法:
修改元素
如果要修改 ArrayList 中的元素可以使用 set() 方法:
删除元素
如果要删除 ArrayList 中的元素可以使用 remove() 方法:
计算大小
如果要计算 ArrayList 中的元素数量可以使用 size() 方法:
迭代数组列表
import java.util.ArrayList;<br><br>public class RunoobTest {<br> public static void main(String[] args) {<br> ArrayList<String> sites = new ArrayList<String>();<br> sites.add("Google");<br> sites.add("Runoob");<br> sites.add("Taobao");<br> sites.add("Weibo");<br> for (int i = 0; i < sites.size(); i++) {<br> System.out.println(sites.get(i));<br> }<br> }<br>}
import java.util.ArrayList;<br><br>public class RunoobTest {<br> public static void main(String[] args) {<br> ArrayList<String> sites = new ArrayList<String>();<br> sites.add("Google");<br> sites.add("Runoob");<br> sites.add("Taobao");<br> sites.add("Weibo");<br> for (String i : sites) {<br> System.out.println(i);<br> }<br> }<br>}
其他的引用类型<br>
ArrayList 中的元素实际上是对象,在以上实例中,数组列表元素都是字符串 String 类型。<br><br>如果我们要存储其他类型,而 <E> 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。
ArrayList 排序
Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
import java.util.ArrayList;<br>import java.util.Collections; // 引入 Collections 类<br><br>public class RunoobTest {<br> public static void main(String[] args) {<br> ArrayList<String> sites = new ArrayList<String>();<br> sites.add("Taobao");<br> sites.add("Wiki");<br> sites.add("Runoob");<br> sites.add("Weibo");<br> sites.add("Google");<br> Collections.sort(sites); // 字母排序<br> for (String i : sites) {<br> System.out.println(i);<br> }<br> }<br>}
Java ArrayList 方法
add() 将元素插入到指定位置的 arraylist 中<br>addAll() 添加集合中的所有元素到 arraylist 中<br>clear() 删除 arraylist 中的所有元素<br>clone() 复制一份 arraylist<br>contains() 判断元素是否在 arraylist<br>get() 通过索引值获取 arraylist 中的元素<br>indexOf() 返回 arraylist 中元素的索引值<br>removeAll() 删除存在于指定集合中的 arraylist 里的所有元素<br>remove() 删除 arraylist 里的单个元素<br>size() 返回 arraylist 里元素数量<br>isEmpty() 判断 arraylist 是否为空<br>subList() 截取部分 arraylist 的元素<br>set() 替换 arraylist 中指定索引的元素<br>sort() 对 arraylist 元素进行排序<br>toArray() 将 arraylist 转换为数组<br>toString() 将 arraylist 转换为字符串<br>ensureCapacity() 设置指定容量大小的 arraylist<br>lastIndexOf() 返回指定元素在 arraylist 中最后一次出现的位置<br>retainAll() 保留 arraylist 中在指定集合中也存在的那些元素<br>containsAll() 查看 arraylist 是否包含指定集合中的所有元素<br>trimToSize() 将 arraylist 中的容量调整为数组中的元素个数<br>removeRange() 删除 arraylist 中指定索引之间存在的元素<br>replaceAll() 将给定的操作内容替换掉数组中每一个元素<br>removeIf() 删除所有满足特定条件的 arraylist 元素<br>forEach() 遍历 arraylist 中每一个元素并执行特定操作
Java LinkedList<br>
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
以下情况使用 ArrayList :
频繁访问列表中的某一个元素。<br>只需要在列表末尾进行添加和删除元素操作
以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。<br>需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
LinkedList 继承了 AbstractSequentialList 类。<br><br>LinkedList 实现了 Queue 接口,可作为队列使用。<br><br>LinkedList 实现了 List 接口,可进行列表的相关操作。<br><br>LinkedList 实现了 Deque 接口,可作为队列使用。<br><br>LinkedList 实现了 Cloneable 接口,可实现克隆。<br><br>LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
Java HashSet
Java HashMap
Java Iterator<br><br>
Java Object<br><br>
Java 泛型<br><br>
Java 序列化<br><br>
Java 网络编程<br><br>
Java 多线程编程
0 条评论
下一页