`

java基础(二)

    博客分类:
  • java
阅读更多

Java 基础(二)

toString () :使用 System.out.println() 方法时,调用对象的 toString() 。可以重写 toString()

== equals hashcode 只有当两个引用都引用相同的对象时, == 才计算为 true equals 默认使用 == 运算符比较。可以重写 equals 方法,比较两个对象内容是否相同。如果使类对象作为散列表中的键,必须重写 equals ,重写函数签名必须为: public boolean equals(Object o) equals 的约定:自反性,对称性,可传递性,一致性。 x.equals(null) 返回 false

Object 类中的默认散列码总是为每个对象产生一个唯一号。

equals hashcode 的约定:如果两个对象 equals ,他们必须具有相同的 hashcode hashcode 相同,对象不一定 equals ;对象不 equals hashcode 不一定不同。搜索比较时首先使用 hashcode() ,然后使用 equals 检索正确的元素 , 只有当 hashcode 相同, equals 返回 true ,两个对象才能看成完全相同。 transient 标识的属性最好不要用来确定对象的散列码或相等性。

集合


两种顺序: Sorted 顺序,类实现 Compareable 接口定义的顺序或 Comparator 定义的顺序。

Ordered 顺序:可以按照特定顺序遍历集合。通过索引或者插入顺序访问。

List 提供与索引相关的方法。按照索引位置排序,没有 Sorted 顺序。

ArrayList :提供快速遍历和快速随机访问。适用:要快速遍历但是不做大量的插入和删除时。非线程同步。

Vector :基本上和 ArrayList 同,线程同步。

LinkedList :元素之间是双链接,容易被选择设计栈和队列。元素遍历比较慢,可以快速插入和删除。实现 Queue 接口,支持 peek() poll() offer() 方法。

Set 不允许重复

HashSet :非 Sorted ,非 Ordered

LinkedHashSet :非 Sorted Ordered 。可以按照元素的插入顺序遍历它们。

TreeSet Sorted ,非 Ordered ;将元素按照自然顺序升序排序;可以选择一个带构造函数的 TreeSet ,通过 Comparable 或者 Comparator 为集合提供自己的规则。

Map 键值对,键惟一。

HashMap :非 Sorted ,非 Ordered 。允许一个集合中有一个 null 键和多个 null 值。非线程安全

Hashtable HashMap 的同步版本。线程安全,不允许任何内容为 null

LinkedHashMap :非 Sorted Ordered

TreeMap Sorted ,非 Ordered

Queue:

PriorityQueue: 按照自然顺序或 Comparator 进行排序的。

排序集合和数组

使用 Collections.sort Arrays.sort 对集合和数组进行排序。排序的对象需要 implement Comparable 接口中的 compareTo 方法,方法返回负数, 0 ,正数。

[Collections/Arrays].sort 的重载版本:接受 Comparator 的实现类,自定义排序方法。

对于基本类型, Arrays 始终使用自然顺序进行排序。

搜索集合和数组

binarySerach 返回值:成功返回值的 int 索引,不成功返回 int 索引标识插入点 = - 插入点) -1 )。

搜索的集合或者数组必须在搜索之前进行排序,否则返回结果不可预测。排序顺序和搜索的顺序必须是同一个顺序。

Arrays Lists 之间进行转换

Arrays.asList :返回数组支持的固定大小的 list 。对 list 的操作更新到数组中。

泛型:

(1) 泛型使编译器强加类型安全,只在编译时保护,在运行时不会存在。

(2) 非泛型集合可以容纳任何非基本类型的任何对象,获取对象时只返回 Object 。混合泛型和非泛型集合会产生编译警告。

(3) 泛型集合元素赋值:集合元素可以是泛型类型的子类。

(4) 泛型集合赋值:多态适用于“基本”类型,不适用于泛型类型。泛型类型必须严格相同。通配符 <?extends Parents> <? super Child> 可以实现多态赋值。 .<?> 完全等同于 <? extends Ojbect> 。集合参数类型为 <? extends Parents> <?> 时,不能对集合 add 。通配符只针对声明使用。

(5) 使用泛型声明来创建泛型类和泛型方法。

内部类:

四种类型:静态内部类,实例内部类,方法内部类,匿名类。

实例内部类:

(1)       类内部没有 static 声明 , 可以访问外部类内部任何成员

(2)       在外部类外部,通过外部类的实例实例化内部类;在外部类里面,可以直接使用内部类类名实例化。

(3)       内部类内部使用 this 指内部类的实例,使用 Outer.this 引用外部类实例。

(4)       内部类修饰符:访问修饰符 public protected private final abstract strictfp

方法本地内部类:

(1)       方法里面声明的类。只能在方法内部使用

(2)       只能引用方法内部 final 声明的变量。

(3)       不能标识方法内部类用访问修饰符, static 。只可以使用 abstract final

匿名内部类:

一般用来产生一个类或接口的匿名类对象。可以在任何使用对象的地方使用匿名内部类来赋值。

静态内部类:

(1)       类内部声明为 static 的内部类。

(2)       不需要外部类的实例即可创建静态内部类实例。

(3)       不能访问外部类的非静态成员。因为没有外部实例的隐含引用。

线程

(1) 定义线程:两种方法, extends Thread implements Runnable

(2) 实例化线程: new MyThread(); new Thread(new MyRunnable()); new Thread(new MyThread());

(3) 启动线程: t.start(); 线程启动后,同一个实例不能再次 start

(4) 线程状态:新,死,运行,就绪,阻塞。

(5)sleep 后只能回到就绪状态,等待调度。它是一个 static 方法。

(6) 线程优先级:数字越大优先级越高。 yield 方法让线程从运行状态到就绪状态。

(7)join t.join() 让当前调用线程加到 t 线程的尾部,等待 t 线程结束后才可以运行。

线程离开运行状态的方法: yield join sleep run 完成, wait synchronized 阻塞,被线程调度程度转换成就绪状态。

(8)synchronized :线程在执行 synchrnoized 时需要获取对象的锁,执行完 synchrnoized 之后会自动释放锁,在释放锁之前任何别的线程不获取该对象的锁定。 Sleep 不释放锁。

Public synchronized void doStuff(){System.out.println(“test”);} 等价于:

Public void doStuff(){synchronized(this){ System.out.println(“test”);}}

Public static synchronized int getCount(){return count} 等价于

Public static int getCount(){synchronized(MyClass.class){return count;}}

(9) 线程死锁:获取两个或者以上的资源,获取资源的顺序不定,两个以上的线程。可以通过使用按照一定的顺序获取资源来避免死锁。

(10)wait notify notifyAll ,必须在 synchronized context 中,否则抛出 RuntimeException 。每个对象都有一个等待列表,等待来自该对象的信号。线程执行 wait 的时候,线程从运行状态进入阻塞状态,在对象的等待队列中加上该线程,在对象上执行 notify 的时候,从对象的阻塞队列中唤醒一个线程进入就绪状态, notifyAll 唤醒对象阻塞队列上的所有线程。

  • 大小: 86.4 KB
分享到:
评论

相关推荐

    Java坦克大战游戏二级实践课题报告及源码、Java基础继承、继承、多线程、事件,二级实践课题

    这是我在大一写的Java基础二级实践课题,里面有我自己写的报告和课题一步步写下来的思路和方法,里面基本上java基础的知识都用到了,例如java的多线程,还有继承,在这个课题中继承解决很多代码冗余的问题,还有就是...

    《Java基础入门》-课后习题答案.doc

    二、Java 基础知识 * Java 语言的八种基本数据类型有:byte 字节型、short 短整型、int 整型、long 长整型、float 单精度浮点型、double 双精度浮点型、char 字符型、boolean 型。 * 变量的类型有基本类型和引用...

    java基础案例教程

    java基础的案例分析和实例教学,适合新手及回顾查阅,对于夯实基础有好处

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    《Java基础入门(第3版)》是一本针对Java初学者的教材,其课后答案文档提供了对书中习题的解答,旨在帮助读者巩固所学知识。Java是一种面向对象的编程语言,具备跨平台性,由Java虚拟机(JVM)负责解释执行。Java...

    java基础知识大全(必看经典)

    二、 Java 语言的历史发展 * 1995 年 5 月:Java 技术首次亮相,用于消费类设备。 * 1996 年 1 月:网景公司决定在 Netscape2.0 加入对 Java 的支持,从此 Java 开始流行。 * 1996 年初:SUN 公司发布了 Java 1.02...

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其教学设计旨在通过实例引导学生深入理解Java语言的核心概念。本教程覆盖了从环境搭建到程序设计的各个环节,旨在帮助学生建立起坚实的...

    Java基础入门源代码

    这个"Java基础入门源代码"集合应该是为了帮助初学者理解和实践Java编程基础而设计的。让我们详细探讨一下Java语言的基础知识,以及如何通过源代码学习。 1. **基本语法**:Java的语法与C++和C#类似,它包括类、对象...

    Java基础案例教程(第2版)-课后习题答案.zip

    《Java基础案例教程(第2版)》是一本专为初学者设计的教材,旨在帮助学习者掌握Java语言的基础知识,并通过实践案例加深理解。本教程的课后习题答案包含在"Java基础案例教程(第2版)-课后习题答案.zip"压缩包中,...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-042-Java基本语法-二进制到十六进制数的转换.avi 北京动力节点-Java编程零基础教程-043-Java基本语法-八进制、十六进制转换为十进制数.avi 北京动力节点-Java编程零基础教程-044...

    传智播客.黑马程序员《Java 基础入门》课后习题答案

    《Java 基础入门》课后习题答案 第 第 1 章 Java 开发入门 一、填空题 1、 Java EE、Java SE、Java ME 2、 JRE 3、 javac 4、 bin 5、 path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、 面向...

    《Java基础案例教程(第2版)》课后习题答案1

    【Java基础知识点】 1. **Java的起源与特性** - Java是由SUN Microsystems公司(后被Oracle收购)开发的一种面向对象的编程语言。 - Java有三个主要版本:Java Standard Edition (JavaSE),用于桌面应用;Java ...

    Java基础案例教程.rar

    "Java基础案例教程"是为初学者设计的教育资源,旨在帮助他们掌握Java编程的基础概念和实践技能。本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下...

    java基础入门二

    java基础入门课件、简单明了、没有多余的东西、都是精华

    Java基础知识总结.pdf

    ### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...

    Java基础学习第二天

    在Java基础学习的第二天,主要涵盖了以下几个重要知识点:计算机组成原理,DOS命令,进制转换,Java的发展历程,Java的三大平台,Java运行核心机制,JDK的安装与环境变量配置,以及Java的基本语法。 首先,计算机...

    java基础资料

    "java基础资料"涵盖的应该是Java编程的基础概念和技能,适合初学者入门。以下是基于这个主题的详细知识点讲解: 1. **Java语言简介**:Java是由James Gosling在1995年创建的,它的设计目标是“一次编写,到处运行”...

    Java基础尚硅谷宋红康学习笔记

    【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括...

Global site tag (gtag.js) - Google Analytics