【概念笔记】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. 构造方法 ...
 
随机推荐
- Linux下的段错误(Segmentation fault)
			
Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...
 - oc中的枚举定义
			
typedef NS_ENUM(类型,枚举名){ 枚举名+值名, 枚举名+值名,}; 该方法定义的枚举,OC会自动把其转换成合适当前版本的枚举.如果枚举值可合并的话 NS_E ...
 - 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介
			
一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...
 - 解决:HttpClient导致应用出现过多Close_Wait的问题
			
最近发现一个问题,在服务器上通过netstat命令发现有大量的Close_Wait长时间存在,甚至有时候数量接近1000: 查看服务器参数(etc/sysctl.conf): net.ipv4.tcp ...
 - Android测试——adb命令
			
Adb (Android Debug Bridge)起到调试桥的作用. 通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.adb采用监听Socket TCP 5554等端口 ...
 - 反射类属性生成DataTable
			
public class People //类名 { private static string name; //字段 private string sex;//字段 public string Se ...
 - db2 进程
			
DB2 通用数据库进程全接触 Dwaine Snow, DB2 UDB 和 Informix IDS 产品经理, IBM 多伦多实验室 Dwaine Snow 是 DB2 UDB 分区数据库以及查询巡 ...
 - Android之ImageView  设置宽高
			
方案一: 设置布局参数 imageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newWidth));
 - zabbix监控超详细搭建过程
			
监控及zabbix 目录: 1 监控分类... 1 1.1 硬件监控... 1 1.2 系统监控... 2 1.3 网络监控... 3 1.4 ...
 - HLSL之漫反射光
			
整整忙了一个月了,总算清闲下来了,从上次写完环境光后又过了这么长时间,继续学习......加油!!今天整理下漫反射光并记录下来,那就直接进入主题吧,开始漫反射光的学习. 漫反射光是在环境光的基础上添加 ...