【概念笔记】JAVA基础 - part2
IT`huhiu前言录
这是续JAVA基础 - part1 链接http://www.cnblogs.com/ithuhui/p/5922067.html的。
笔记慢慢在修改和补充
JAVA里面重要的类
1. String
1.String 和 StringBuffer
java.lang.String代表 不可变 的字符序列(所指向的内存区的内容永远无法修改)。
StringBuffer提供了缓冲区,其对象是一个 可变 字符序列(可改变缓冲区的长度和内容
2.可变 不可变 字符序列的理解
String类型每进行一次操作就会new一个新对象。String a ="name"是这样子的:new一个对象,内容是“name”,放在地址A1处,让变量a指向这个A1地址。a = "age":new一个新对象,内容是“age”,放在一个新地址A2,让变量a指向A2。结果打印出来的自然是“age”了。这个时候地址A1处的内容还是“name”,没有变(String为不可变字符串是指这个意思)。另外,这个时候地址A1处的对象(“name”)由于没有变量指向它(变量a已经指向A2),永远无法访问了所以变成了垃圾,等待系统回收
3.String的重要方法 Intern();
public String intern()返回字符串对象的规范化表示形式
一个初始为空的字符串池,它由类String私有地维护。当调用intern()方法时,如果字符串池中已经包含一个等于此String 对象的字符串 (用equals(Object)方法确定),则返回字符串池中的字符串。否则,将此String 对象添加到字符串池中,并返回此String 对象的引用。它遵循以下规则:对于任意两个字符串s 和 t,当且仅当 s.equals(t)为true时,s.intern() == t.intern() 才为true。
2.File类
3. Enum类
4. 基本数据类型
5. Math类
JAVA I/O流
I/O流附图:
- 按数据流的方向不同可以分为输入流和输出流
输入流:
输出流:- Reader
- Writer
- Reader
- 按处理数据单位不同可以分为字节流(字节流:最原始的一个流,读出来的数据01010101这样去读,一个字节8位,8位8位去读)和字符流(一个字符两个字节)
- 按功能不同可以分为节点流和处理流
- 节点流从一个特定的数据源(节点)读写数据,如文件内存
- 处理流是"连接"在以存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
- 转换流
数据流
- Print流
- Object类I/O
想把某个类的对象序列化必须要实现 Serializable
序列化的程序会将对象版图上的所有东西都存储起来。被对象的实例变量所引用的对象都会被序列化。
JAVA 线程和进程
进程
进程是一个静态的概念
事实上,进程在执行指的是进程里面主线程开始执行了
线程
- 线程是一个程序里面不同的执行路径
多线程:
-sleep()和wait()
这两个函数都能让在休息时间内让其他线程执行。
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,
sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep
-notify()和notifyAll()
如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。
如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。
如果对象调用了notifyAll方法就会通知所有等待这个对象控制权的线程继续运行。- 线程同步化
- 同步方法
即有synchronized关键字修饰的方法。
由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,
内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
代码如:
public synchronized void save(){}
注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类
- 同步代码块
即有synchronized关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
代码如:
synchronized(object){ }
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。代码实例:
package com.xhj.thread; /** * 线程同步的运用 * * @author XIEHEJUN * */ public class SynchronizedThread { class Bank { private int account = 100; public int getAccount() { return account; } /** * 用同步方法实现 * * @param money */ public synchronized void save(int money) { account += money; } /** * 用同步代码块实现 * * @param money */ public void save1(int money) { synchronized (this) { account += money; } } } class NewThread implements Runnable { private Bank bank; public NewThread(Bank bank) { this.bank = bank; } @Override public void run() { for (int i = 0; i < 10; i++) { // bank.save1(10); bank.save(10); System.out.println(i + "账户余额为:" + bank.getAccount()); } } } /** * 建立线程,调用内部类 */ public void useThread() { Bank bank = new Bank(); NewThread new_thread = new NewThread(bank); System.out.println("线程1"); Thread thread1 = new Thread(new_thread); thread1.start(); System.out.println("线程2"); Thread thread2 = new Thread(new_thread); thread2.start(); } public static void main(String[] args) { SynchronizedThread st = new SynchronizedThread(); st.useThread(); } }
- 同步方法
这里附带一篇用于理解进程和线程的,写的很好的文章,很生动! 转载:进程和线程理解
【概念笔记】JAVA基础 - part2的更多相关文章
- 菜鸡的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基础 - part1
IT`huhui前言录 这是自己对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. 构造方法 ...
随机推荐
- 8.1H5学习笔记
内嵌框架 说明: 属性 属性值 说明 width px,% 指定框架的宽度 height px,% 指定框架的高度 scrolling yes,no,auto 是否显示滚动条 frameborder ...
- 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld
最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...
- WinExec
WinAPI: WinExec - 运行外部程序 //声明 WinExec( lpCmdLine: LPCSTR; {文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目录/Syste ...
- js中~~的用法
~~(Math.random()*(1<<24))).toString(16) ~~的作用相当于parseInt
- poj 2536 Gopher II (二分匹配)
Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6345 Accepted: 2599 Descrip ...
- ZT “樱花小萝莉”走红网络 网友:好想生个女儿
“樱花小萝莉”走红网络 网友:好想生个女儿 投递人 itwriter 发布于 2014-04-02 17:39 评论(3) 有717人阅读 原文链接 [收藏] « » 近日,一组被网友亲切地称呼 ...
- mysql查询数据返回touple改为字典的方法
conn = MySQLdb.connect(host='ip',user='root',passwd='123456',db="dbname",charset="utf ...
- phpcms v9编辑器ckeditor设置回车换行br为段落p标签
phpcms v9和dedecms自带的编辑器都是使用的ckeditor,在默认情况下使用ckeditor编辑内容时,按下回车键后在源代码显示的是<br>而非<p>标签,对于习 ...
- 使用 IntraWeb (41) - 数据控件速查
TIWDBCheckBox 所在单元及继承链: IWDBStdCtrls.TIWDBCheckBox 主要成员: property AutoEditable: Boolean //根据 DataSou ...
- NameError: name 'pip' is not defined
NameError: name 'pip' is not defined 直接去cmd下执行...pip pip install virtualenv