【概念笔记】JAVA基础 - part1
IT`huhui前言录
这是自己对JAVA基础的一个小总结,会不断完善。因为时间仓促的原因。
每学习一段时间,停下来,静心总结一下,甚好。停停走,走走停,一往无前,不摔倒。
一些链接里面是我看到一些人理解后写出来很好的文章然后我转载过来的。
原创博文,大家转载的意欲,请附带上以下信息:
来自:IT`huhui的个人博客
作者:胡伟汇
链接: 原文链接
JAVA内存分配机制
stack (栈) 存放局部变量和方法调用
heap (堆) 存放new出来的对象,实例对象的存在于对象所属的heap空间上
data segment(变量区) 静态变量和字符串变量
code segment (代码区) 存放代码
注意区分好局部变量,实例变量,静态变量存放的不同区域。
| 变量 | 生命周期 |
| 静态变量 | 在类被加载时进行初始化,生命周期与类的生命周期相关 |
| 实例变量 | 存放在对象所属的heap空间上,生命周期和实例的对象相关 |
| 局部变量 | 局部变量和方法的参数都被生命在方法当中, 生命周期与方法被放在stack上的时间相关, 就是方法调用执行完毕,则生命周期结束 |
例子:
public class Sample
{
private static c = 3;//静态变量
private int a=1; //实例变量
public void b()
{
int a=2; //局部变量
System.out.println("局部变量:a="+a);
System.out.println("实例变量:a="+this.a);//局部变量的作用域内引用实例变量:this.变量名
}
public static void main(String[] args)
{
new Sample().b();
}
}
局部变量:2
实例变量:1
静态变量:3
附图:

JAVA 的继承
- 只支持单继承,不允许多继承。
- 继承中的构造方法:
- 子类的构造过程中 必须 调用到父类的构造方法。
- 子类可以在自己的构造方法中使用super来调用父类的构造方法。
- 如果使用 this(参数)方法 会调用本类的另外的构造方法。
- 如果调用 super方法 必须在子类构造方法的第一行。
JAVA 多态(动态绑定)
多态:在执行期间 (而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用相对应的方法
多态存在的必要条件
- 有继承(或接口实现)
- 要有重写
- 父类引用指向子类对象
Object 类的 equals
必须是同一个对象才返回true 否则返回 false
String,Date 类等某些类对equals进行了重写,举例,在String中equals对比的是值,但是"=="比较的是内存地址。
子类没有明确些调用父类的构造方法。则系统默认调用父类的无参数构造函数
如果父类没有无参构造函数,子类又没明确调用父类构造方法,编译出错
JAVA 权限控制

JAVA方法的重写和重载
- 方法重写
- 对父类继承来的方法进行重写。
- 重写的方法要与被重写的方法具有相同方法名称,参数列表和返回类型
- 重写方法不能比被重写方法更严格的访问权限
- 方法重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数
值传递原则
基本类型传递的是该数值本身。引用类型传递的是对对象的引用,不是对象本身
异常分类
附图:
throwable
- error 系统本身错误 由虚拟机生成并且抛出
- exception 可以处理的异常 一般需要用户捕获
- runtimeException 用户可以不处理
Collection 容器

List接口(一句话:有顺序,元素可以重复)
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Set接口(一句话:没顺序,元素不可以重复。重复判断标准:相互equals)
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Map接口(一句话,key唯一,value可以重复)
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。总结:
1. 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
3. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
4. equals 的时候hashcode应该相等
5. 容器类对象在调用remove、contains等方法时需要比较对象是否相等。这会涉及到对象类型的equals方法和hashcode方法;对于自定义的类型;需要重写equals和hashcode方法以实现自定义对象的相等规则。
注意,相等的对象应该具有相等的hashcodes。在这里记录下Set和List 用迭代器遍历方法
``` java
//LIST
for(Iterator iter =list.iterator(); iter.hasNext();){
String str=(String )iter.next();System.out.println(str); }
//Set
Set keyset = mapmysql.keySet();
for (Iterator iterator = keyset.iterator();iterator.hasNext();){
int key = (int) iterator.next();
int values = (int) mapmysql.get(key);
}
```
比较器——Comparable
- 实现Comparable,编写compareTo()方法
public Song implements Comparable<Song>{
String title;
String artist;
String rating;
String bpm;
public int compareTo(Song s) {
return title.compareTo(s.getTitle());
}
}
- 另一种sort()方法,取用Comparator参数
- 创建并实现Comparator的内部类。用compare()方法替代了compareTo()方法。
- 调用重载的sort(),传入list和CompareTo的实例。
//这里举个在《Head First Java》里面看到的例子。
public class Jukebox5{
ArrayList<Song> songList = new ArrayList<Song>();
public static void main(String [] args){
new Jukebox5().go();
}
class ArtisCompare implements Comparator<Song>{
public int compare(Song one ,Song two ){
return one.getArtist().compareTo(two.getArtist());
}
}
public void go(){
System.out.println(songList);//排序前
ArtistCompare artistCompare = new ArtistCompare ();
Collection.sort(songList , artistCompare);
System.out.println(songList);//排序后
}
}
数组
区分:
- 数组对象的内存图:

- 数组元素为引用数据类型的内存图

【概念笔记】JAVA基础 - part1的更多相关文章
- 菜鸡的Java笔记 java基础类库 BaseClassLibrary
java基础类库 BaseClassLibrary StringBuffer 类的特点 StringBuffer,StringBuilder,String 类之间的关系 ...
- Java学习笔记——java基础
2020.9.1 学习来自 https://www.liaoxuefeng.com/wiki/1252599548343744/1255883729079552 一.变量和数据类型 基本数据类型 基本 ...
- java学习笔记 --- java基础语法
一.java标识符,关键字,保留字 1.标识符 用来增强程序阅读性自定义的名字.类名,变量名,方法名等都可以被称为标识符 标识符的组成: 1.由数字(0-9),字母(a-z,A-Z),下划线(_),美 ...
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 内容简介: ------------ ...
- 【概念笔记】JAVA基础 - part2
IT`huhiu前言录 这是续JAVA基础 - part1 链接http://www.cnblogs.com/ithuhui/p/5922067.html的. 笔记慢慢在修改和补充 JAVA里面重要的 ...
- JAVA学习笔记之基础概念(一)
一.Java 简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称. 由 James Gosling和同 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
随机推荐
- JavaScript执行bat文件清理浏览器缓存
function exec() { window.onerror = function (err) { if (err.indexOf('utomation') != -1) { alert('命令已 ...
- Python之路【第十七篇】:Django【进阶篇 】
Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...
- Ubuntu14.04安装MySQL-python异常: mysql_config: not found,Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-MJWMPd/MySQL-python/
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABUoAAAE8CAIAAACZ6RwMAAAgAElEQVR4nOydaVxTx9fHn9dhKWqltv
- python之路-Day1
Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言 动态语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量 ...
- JQuery 操作按钮遮罩(删除)
HTML代码: <input type="button" class="delete_btn" value="删 除" /> & ...
- 如何异步创建文件夹(node)
模块fs作为node的核心模块之一,支持本地文件操作的接口,几乎对于所有的操作都提供同步和异步两种方案.例如,创建文件夹有mkdir和mkdirSync.不论对于mkdir还是mkdirSync,都需 ...
- delphi之多线程编程
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- VS2013中,RDLC设置数据源和参数的界面
今天打开RDLC文件设置参数和数据源时,始终找不到那个窗口,原来那个窗口叫“报表数据”,在“视图”菜单的最下面! 另外:要在当前窗口时打开的RDLC文件时,视图下面才有该选项!!! 参考:http:/ ...
- PHP--字符串处理函数
字符串的声明 1. 2. 3. [注]单引号与双引号声明字符串的区别: 1.strlen():获取字符串长度 2.substr():截取字符串 3.strpos():查找字符串在指定字符串中的位置 4 ...
- [题解]UVa 10635 Prince and Princess
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...