Java基础笔记

1、什么是Javabr> 计算机软件编程语言
C C++ 底层的开发 大型游戏的开发 操作系统
Java:中大型互联网程序应用的开发
PHP:中小型互联网程序应用
.NET:中大型互联网程序应用的开发
嵌入式:软+硬件编程技术
python
2、Java的发展历史
从1991年开始,Sun公司成立了一个Green项目组,数字家电
之间的通信和协作。Oak–全新的语言,James Gosling
1994-1995年,互联网流行,Oak–Java
1.0–1.1 –1.2…
Oracle公司 74亿美金
3、Java未来的发展
android手机–安卓操作系统 2007年Google公司推出
互联网–移动互联网
大物移云
4、Java的平台
1)JavaSE:java平台标准版(Java Standard Edition)
也是java平台的基础,包含了java的基础和
高级应用的知识部分
桌面级程序应用
Client(客户端)架构
C(客户端)/Server(服务器端)架构
2)JavaEE:java平台企业版(Java Enterprise Edition)
HTML CSS JavaScript…
Browser浏览器/Server架构 404错误
互联网程序应用
3)JavaME:java平台的微型版 –不用
5、Java语言的特点
1)简单 Date JFrame JButton
2)面向对象的编程语言
3)跨平台 Windows Linux/Unix操作系统 jdk
xx.java–>xx.class
4)安全
5)支持多线程 QQ
6、搭建Java的开发环境 **
JDK java语言的软件开发工具包
(Java Development Kit)
–JRE java的运行环境
–API 核心类库
–jvm java虚拟机
Window+R组合键 cmd回车–>打开命令行窗口
java -version回车 查看当前安装的jdk版本
java 运行java程序
javac 编译java程序

配置环境变量:
Window+E–>计算机–右击–>属性–>高级系统设置
–>高级–>环境变量–>系统变量–Path–>编辑–>
C:Program FilesJavajdk1.8.0_25bin复制进来–>确定

写一个HelloWorld程序(xx.java)
命令行窗口
e:回车 切换到e盘下
cd … 返回上一级目录
cd xx 进入xx目录里
dir回车 查看当前路径下的内容
javac HelloWorld.java 将HelloWorld.java文件编译
为HelloWorld.class文件
java HelloWorld 运行HelloWorld.class文件
(注意.class省略)
7、集成开发工具
是IBM公司研发的一种开源免费的软件,主要用于开发java
eclipse jdk+配置环境变量+eclipse
javaSE
myeclipse 直接安装
javaSE javaEE

PackageExplorer视图:负责显示java程序的目录结构
Console视图:负责java程序的输入和输出

step1:新建一个java项目(java project)
src目录:用于写java源代码(xx.java)
JRE System Library:java的运行环境(核心的类库)
step2:新建一个包/文件夹/Package
step3:新建一个类/Class
HelloWorld.java == Class HelloWorld
A.java == Class A
step4:运行

在开发工具中java程序的执行原理:
1)在工作空间中,bin目录存储.class字节码文件
src目录存储.java源文件
2)在开发工具中,保存是一个编译的过程,会将源文件
编译为字节码文件
保存相当于执行的是javac命令
3)在开发工具中点击运行按钮,运行的是编译之后的字节码文件
运行相当于执行的是java命令
8、变量
一个变化的量,理解为自然语言中的代词 你 我 她
你好 张三
李四
1)变量的声明:
:未经声明的变量的不能使用:
2)变量的初始化
:没有经过初始化的变量不能使用;
3)变量的使用
4)变量名的命名规则
:可以由字母、数字、“_”和”$”符号组成;

9、Java中的数据类型
一、基本数据类型(8种)
1)整数类型(4种)
byte(8位) short(16位) int(32位) long(64位)
-128~127 -32768~32767 ±21亿左右 很大
0111 1111 – 127

0000 0010 – 2
0000 0001 – 1
0000 0000 – 0
1111 1111 – -1

1000 0000 – -128
0111 1111 1111 1111 – 32767
2)浮点类型(2种)
float double
3)字符类型(1种) char
4)布尔类型(1种) boolean
二、引用数据类型(无数种)
概念:由java中的数组、类、接口等作为的数据类型称之为引用
数据类型
byte short int long 基本数据类型

10、Java中的运算符
(1)算术运算符 + – * / % ++ –
(2)关系运算符 > >= < <= == !=
(3)逻辑运算符 && || !
(4)赋值运算符 = += -= *= /=
(5)字符串连接运算符 +
(6)三目运算符

11、Scanner扫描器,是java提供好的一个工具类,在java.util包中
该工具类能够实现从控制台Console中输入内容到程序里
step1:创建Scanner扫描器
step2:引入Scanner扫描器
step3:调用Scanner类的方法实现内容的输入

12、分支结构
顺序结构:代码的执行是从上往下依次执行,每一行都会执行的
分支结构:有条件的执行某些代码,并不是很行代码都执行
循环结构:根据条件反复执行某些代码

练习1:要求从控制台输入一个年份,判断该年是平年还是闰年
平年 365天 2月 28天
闰年 366天 2月 29天
判断闰年的公式:
1)能被4整除,并且不能被100整除的年
2)能被400整除的年
练习2:模拟柜台收银的程序
要求:从控制台输入商品的单价、数量和付钱的金额
如果总消费金额满500元,打8折
如果付钱的金额够了,输出商品消费了多少,找零了多少
如果付钱的金额不够,输出商品消费了多少,还差多少
练习3:从控制台输入三个整数,找出最大值并输出(2种方法思路)
练习4:要求从控制台输入年份和月份,根据输入的年和月判断有几天
31天:1 3 5 7 8 10 12月
30天:4 6 9 11月
平年的2月:28天
闰年的2月:29天

分支结构的另一种语法:switch条件语句
switch只能针对某个表达式的值做出判断。
switch语句中的表达式只能是byte、short、char、int类型的值。
从JDK7.0开始,switch语句可以支持String字符串类型的值
语法:switch(表达式的值){
case 值1:
内容1
break;
case 值2:
内容2
break;

default:
其它内容
break;
}
练习:从控制台输入分数,根据输入的分数,使用switch判断等级
[90-100] A优秀 90/10 95/10 98 100/10
[80-90) B中等
[60-80) C一般
[0-60] D不及格

13、循环结构:根据条件反复执行一块代码
while循环 do…while循环 for循环
循环三要素:
a 循环的起始条件
b 循环的结束条件
c 循环条件的改变
1)while循环
语法:
循环的起始条件; 1
while(循环的结束条件2){
内容;3
循环条件的改变;4
}
执行过程:1->2->3->4-> 2->3->4… 2为false,循环结束
2)do…while循环
语法:
循环的起始条件; 1
do{
内容; 3
循环条件的改变; 4
}while(循环的结束条件);2
执行过程:1-> 3->4->2-> 3->4->2 …2为false,循环结束
3)for循环
语法:
for(循环的起始条件1;循环的结束条件2;循环条件的改变4){
内容 3
}
执行过程:1-> 2->3->4-> 2->3->4… 2条件为false,结束

练习1:打印99乘法口诀表
11=1
2
1=2 22=4
3
1=3 32=6 33=9

91=9 92=18 … 9*9=81

练习2:在控制台输入如下图形
* 3空格+1个* 换行
*** 2空格+3个* 换行
***** 1空格+5个* 换行
******* 0空格+7个* 换行
*****
***
*
变量 数据类型 运算符 分支结构 循环结构
1)变量的类型转换
类型从小到大依次为:
(16位,-32768-32767)
byte->short->int->long->float->double
char(16位,0-65535)

2)变量的作用域{}
3)方法
面向对象的编程
对象:看到的任何一个合理的事物都可以理解为一个对象
万物皆对象
现实 java
对象 类Class
学生 public class Student{ }
特征 属性
学号 int id;
姓名 String name;
年龄 int age;
行为 方法
学习 public void study(){ }
睡觉 public void sleep(){ }

打球
对象:书 Book 鱼 Fish

数组
1)数组的概念
程序:由人事先写好的,让电脑做的
程序:算法+数据结构
一个好的算法+数据结构=优秀的程序
算法:变量、运算符、分支、循环…
数据结构:数组,是一种最基本的数据结构 集合

2)数组的初始化
3)数组的访问
4)数组的复制
5)数组的排序
排序:将数组中的内容按照由小到大或者由大到小进行重新排列
冒泡排序 插入排序 快速排序…

练习:要求从控制台输入一个班的班级人数,根据人数再从控制台
输入学生的姓名和成绩,将姓名和成绩分别保存到两个数组
中。
存储成功之后,计算全班同学的总分,平均分,最高分,最
低分,最高分对应的学生的名字,最低分对应的学生的名字
以上结果全部输出。

二维数组:由多个一维数组组成(多少行,多少列构成的)
int[] arr1={1,2,3}
int[] arr2={4,5,6}
int[] arr3={7,8,9}
二维数组的初始化:
1)静态初始化二维数组
数据类型[][] 数组名={
{静态初始化的一维数组},
{静态初始化的一维数组},
{静态初始化的一维数组}
};
2)动态初始化二维数组
数据类型[][] 数组名=new 数据类型[行][列];

二维数组的访问操作
1)求二维数组的大小
数组名.length – 行
数组名[i].length – 第i行的列
2)访问二维数组中的内容
数组名[行][列]

练习:使用二维数组定义这首诗,输出如下两种格式
床前明月光
疑是地上霜
举头望明月
低头思故乡

java回车 java回车 支持
java FiveChessGame回车运行
五子棋大作业:
1)输出17行17列的棋盘
2)黑方和白方落子
3)黑方和白方能够根据落子的内容在对应位置下@和0
4)判断黑方或者白方胜利,游戏结束
5)判断黑方或者白方重复落子的功能

用到的知识点:变量、数据类型、运算符、分支、循环、
一维数组、二维数组,方法

面向对象
1、面向过程的程序化设计
public static void mian(String[] args){
xxx
xxx
int a=3;
int b=5;
int s=a+b;
System.out.println(s);
xxx
}
面向对象的程序化设计
public static void main(String[] args){
new Scanner();
}
Scanner类 == 对象
java语言支持面向对象
类Class == 对象
属性 特征
方法 == 行为
学生 public class Student{ }

2、对象中的属性/特征
属性在对象中定义后,有默认值
(1)整数类型byte short int long的属性,默认值为0
(2)浮点类型float double的属性,默认值为0.0
(3)布尔类型boolean的属性,默认值为false
(4)字符类型char的属性,默认值为/u0000(空白)
(5)引用类型的属性,默认值为null
String 类
Scanner 类
3、面向对象程序化设计一个类,类如何创建何使用br> (1)类/对象设计完成后,可以使用new关键字创建。创建对象的过程
通常称为实例化。
new对象=创建对象=实例化对象
(2)为了能够对实例化的对象进行访问,需要使用一个特殊的变量
–引用/引用变量
int age=30; age是基本数据类型的变量
double d=3.14; d是基本数据类型的变量
Student stu1=new Student();
stu1是引用,是引用变量
Student是stu1引用变量的类型,该类型是引用数据类型

练习:在TestCell类中添加如下功能:
要求从控制台输入指令,如果用户输入1,格子下落1格
如果用户输入2,格子左移1格
如果用户输入3,格子右移1格
如果用户输入0,游戏退出
如果用户输入其它数字,输出无效指令,请重新输入

public [static] 方法的返回值类型 方法名(参数列表){
方法体
}

用static 修饰的方法可以通过类名直接被调用, 不用static修饰的需要先实例化一个对象后才可以被调用

3、方法的签名:方法名+参数列表
public void drop(){

}
方法的签名:drop()
注意:在一个类中,不可以有两个方法签名是一致的。
(不可以有方法名和参数列表一致的)

4、方法的重载(OverLoad)
概念:在一个类中,方法名相同,参数列表不同

注意:方法的返回值不作为方法重载的判断条件。

方法重载的意义:
收款的窗口:两种情况
情况一: 收款台设置3个窗口 A窗口 B窗口 C窗口
现金 银行卡 支票

5、构造方法/构造器
语法:以public开始,构造方法的方法名和类名一致,构造方法没有返回值(连void都没有)
意义:构造方法主要是用于对特征/属性进行初始化
执行时机:实例化对象/类/Class(new 一个对象)时,自动执行构造方法中的代码

种类:无参构造方法
有参构造方法
构造方法在一个类中不是必须加的,是一个锦上添花的代码,添加构造方法是类的结构体更加的完整,类的属性有初始化值

6、this关键字
this表示这个的含义,表示当前类对象
功能: 1)使用this区别变量
在构造方法或者普通方法中,如果方法参数中的变量名和在类中定义的属性名重名了,一定要使用this区分一下,this.属性名,直接写的是参数中的变量名
2)使用this可以在类中调用当前类定义的属性、构造方法和普通方法
this()
this(参数列表)

7、继承
1)意义:代码解耦合(修改一个功能,代码修改的地方越少越好),避免代码的重复使用
2)在java中使用extends关键字完成继承
3)语法:类与类之间可使用继承
public class A{ }
public class B{ }

Java基础:变量、运算符、分支、循环…
Java高级:1、图形界面编程的相关知识点
2、IO流 – 输入和输出流
3、多线程相关知识点 qq
4、Java核心API的使用,集合等
Java语言的应用领域
1)Java桌面级程序应用 Client架构 Client/Server架构
2)互联网程序应用开发 Browser/Server架构
3)移动互联(android)
4)大数据
1、图形界面编程–GUI编程–swing编程
1)GUI(Graphical User Interface)图形用户界面;
图形界面编程使用的工具类大部分是在swing包中。
2)图形界面编程中的2个概念
(1)组件:是图形用户界面的最小单位,里面不能再包含其他的内容了,比如按钮,文本输入框、单选、多选等都是一些基本组件。
(2)容器:把多个基本组件放在一起的称之为容器。比如面板、窗体、对话框等。
2、学习容器、组件
1)容器:
(1)窗体JFrame – 墙
(2)面板JPanel – 小板子/幕布
2)组件:
(1)按钮JButton
(2)标签JLabel
①用于显示文字
JLabel label1=new JLabel(“文字”);
②用于显示图片
图标:ImageIcon
step1:先将所要显示的图片放到图标上
step2:将图标放到标签上
JLabel label2=new JLabel(图标);
(3)文本输入框(文本域)JTextField
①创建一个空文本框
②创建内容空但是带有指定长度的文本框
③创建带指定内容的文本框
④创建带指定内容、指定长度的文本框
(4)多行文本域
JTextArea
(5)密码输入框 JPasswordField
3、布局管理器
1)FlowLayout布局管理器
是一种最为简单的布局管理方法,也是面板JPanel的默认布局,它是以流的方式,从左往右,从上往下的存放组件,默认居中对齐方式。
2)BorderLayout布局管理器
采用东、西、南、北、中的布局方式。
3)GridLayout布局管理器
表格布局,该布局可以指定几行几列。
4、事件处理
三部分:事件源 事件 事件监听
事件源:比如按钮、输入框、单选、图片等,一般都是组件。
事件:单击事件、双击事件等。
事件监听:比如将单击事件绑定到按钮上的行为叫事件监听。
ActionListener事件监听器
事件处理的实现形式:
1)外部类形式
2)内部类形式
3)类本身作为监听器的形式
4)匿名内部类的形式
一般事件类没有复用价值,只是想临时的使用一次就结束了。
匿名内部类的形式语法使用相对简单,便捷,因此使用作为广
泛。

5、抽象abstract类、接口interface
(接口是一种特殊的抽象类)
普通类
public class A{

}
A a=new A(); ok
抽象类
public abstract class B{

}
B b=new B(); error
继承extends,让C类继承B类,会有子父类的继承关系
子类C类,父类B类
public class C extends B{
C类可以使用父类B类中的所有功能
}
接口
接口是一种特殊的抽象类。
抽象类中可以包含普通的方法,也可以包含抽象方法;
接口中只能包含抽象方法。
public interface D{

}
实现implements
public class E implements D{

}
6、事件适配器
适配器一般是由抽象类构成的,使用接口构成的事件监听,需要实现该接口中的所有未实现的方法,而使用抽象类,也就是适配器构成的事件监听,可以根据实际要做的功能选择性的实现某些方法。
其它的事件监听 接口 事件适配器(抽象类)
窗体事件监听 WindowListener WindowAdapter
鼠标事件监听 MouseListener MouseAdapter
下拉列表框的事件监听 ItemListener
滑块移动的事件监听 ChangeListener

水杯 容器 存储水
机房 容器 存储电脑
数组 容器 存储数据
回顾:
数组,理解为一个容器,用来存储一堆具有相同数据类型的数据。
一推
相同数据类型
数据:1 2 3 4 5整数数据 90.2 80.5 3.14浮点数据
‘a’ ‘b’ ‘c’ ‘d’字符数据 “张三” “李四” “王五”字符串数据
创建数组的语法:
90.2 80.5 3.14 浮点数据
方法一:动态初始化数组:
有数组名,有类型,有大小,没有具体的内容
数据类型[] 数组名=new 数据类型[大小];
double[] arr=new double[3];
arr[0]=90.2;
arr[1]=80.5;
arr[2]=3.14;
方法二:静态初始化数组
有数组名,有类型,有大小,有内容
数据类型[] 数组名={值1, 值2, 值3…};
double[] arr={90.2, 80.5, 3.14};

二维数组:将多个一维数组放在一起,就组成了二维数组
int[] arr1={1,2,3};
int[] arr2={4,5,6};
int[] arr3={7,8,9};
二维数组的定义语法:
数据类型[][] 数组名={一维数组1, 一维数组2,…};
int[][] arr={arr1, arr2, arr3};
int[][] arr={{1,2,3}, {4,5,6}, {7,8,9}};
列012
int[][] arr={ {1,2,3}, 0行
{4,5,6}, 1行
{7,8,9} 2行
};
数组名[行下标][列下标]或者数组名[行下标]
arr[0][2] —> 3
arr[1][0] —> 4
arr[0] —> {1,2,3}=arr1
arr[1] –> {4,5,6}=arr2
求二维数组大小
数组名.length:求二维数组的行,也可以理解为求二维数组中包含几个一维数组。
arr.length–>3
数组名[下标].length:求二维数组中某一行的列,也可以理解为求某
一个一维数组中的大小
arr[0].length –>3
arr[1].length –>3
arr[2].length –>3

7、绘图 – 满天繁星的案例
1) 画笔
2) 画纸

8、IO流
InputOutput输入输出流
流的概念:使用输入或者输出的处理方式,对文件、图片、音频、
视频等进行处理。
1) File类:是java提供的一个类,表示一个文件或者文件夹,可以使用该类对文件或者文件夹进行新建、删除、重命名等操作。但是File类不能读写文件里的内容。
2) File类的创建方式
方式1:
File f=new File(“文件或者文件夹”);
方式2:
File f=new File(File,”文件或者文件夹”);
File表示某个路径下的文件夹
f表示在File文件夹下的文件或者文件夹
3) File类中的常用方法
exists() 判断文件或者文件夹是否存在,该方法返回
true表示存在,反之返回false表示不存在。
mkdir() 创建文件夹
getName() 获得文件夹名或者文件名
getCanonicalPath() 获得文件或者文件夹的路径
renameTo(新File) 修改文件或者文件夹的名字
createNewFile() 创建文件
isDirectory() 判断是否是文件夹
isFile() 判断是否是文件
length() 求文件的大小/长度
listFiles() 查看当前文件夹下所有的内容
4) 文件过滤器
FileFilter,是java提供的一个接口,在java.io包中、

5) Java中的IO流
因为File类不能对文件进行读写操作,可以使用IO流对文件进行读写操作。
(1) Java中IO流的分类
A 输入流:从文件中读取数据
输出流:向文件中写数据
B 字节流:是以字节为单位对文件进行读写操作
A->字节编码
字符流:以字符为单位对文件进行读写操作
‘A’ “ggg”
C 节点流:向IO设备(磁盘、网络等)读写的流
包装流:有特定功能的流,在基本的流上封装了一
些特定的功能
(2) 字节流
FileInputStream 字节输入流
read()方法 一次读取一个字节的数据
read(byte[] b) 读取b.length个字节的数据,并且
将读到的这些字节数据放到数组
b中存起来。
分类:输入流-读 字节流 节点流
FileOutputStream 字节输出流
write(int b)方法:先将int转换为byte类型,将
低8位写入文件中。
write(‘C’)—C’对应的unicode编码67,将67int
类型转换为byte类型,写入低八位
等价于write(67)
write(byte[] b) 一次将数组b的内容全部写入
分类:输出流-写 字节流 节点流
(3) 字符流(依赖于字节流完成对文件的读写操作)
InputStreamReader 字符输入流
分类:输入流—读操作、字符流、节点流
int read():一次读取单个字符,返回所读取的
字符数据(字符对应的Unicode编码值)
int read(char[] cc):一次读取cc.length个字符
数据,并将其存储在字符数
组cc中,返回实际读取的
字符数
int read(char[] cc, int off, int len):一次读取len
个字符数据,并存储在cc数
组中,但是放入数组cc的时
候,不是从数组起点开始,而
是从off下标位置开始,返回
实际读取的字符数

OutputStreamWriter 字符输出流
分类:输出流—写操作、字符流、节点流
write(int b):先将int类型转换为byte类型,把
低8位写入,如果是字符类型,将
字符对应的Unicode编码值写入。
writer(String str):直接将字符串str写入
write(String str, int off, int len):将字符串str中
从off位置开始,长度为len的字
符写入
“今天天气不错”
write(char[] c):一次写入字符类型的数组
write(char[] c, int off, int len):将字符数组c从
off位置开始,长度为len的字符写

(4) 字符缓冲输入输出流:为了提高对文件的读写效率,缓冲可以理解为一次读写的内容变大了。
BufferedReader:字符缓冲输入流
分类:输入流、字符流、包装流

BufferedWriter:字符缓冲输出流
分类:输出流、字符流、包装流
9、多线程
1)概念:
程序:计算机支持的每一个任务都可以理解为是一个程序
QQ.exe
进程:运行中的程序叫做进程。一个程序安装后启动运行,在
计算机内存中会出现对应的进程。
多线程:是一个进程内部的更小单位。在一个进程的内部,出
现的一种“并发执行”的现象称之为多线程。
2)Java程序的执行顺序
(1)顺序执行:从main方法开始,从上往下依次执行。
(2)并发执行:各自执行,互补干扰
并发执行并不是真正意义上的同时执行,同时执行只能在现实中做到。在计算机中只能做到并发执行。计算机会使用CPU分配时间片给启动的不同线程,得到时间片的线程会执行,其它的线程只能等待。而且CPU分配时间片是不可控的。微观上看这些线程是走走停停的,但是CPU分配时间片的速度非常快,在没有看清楚线程停止又被调用执行了,所以宏观上去看是一个“同时执行”的现象。
3)多线程的创建方式
(1)通过继承Thread类实现多线程
1)让一个类去继承Thread,因为继承之后该类就具有多
线程的特性了。
2)在该类中调出run方法,在run方法中实现多线程要
做的事请。
3)创建该类,然后调用start方法启动多线程,多线程启
动了,底层会自动调用run方法。
(2)通过实现Runnable接口实现多线程
1)让一个类去实现Runnable接口
2)调用run方法
3)创建该类,借助于Thread类,然后调用start方法
4)线程的生命周期/生命状态
(1)创建状态
当new创建了一个线程实例,创建完成以后该线程就处于
创建状态。
FristThread first=new FirstThread(); // 处于创建状态
(2)就绪状态
当调用了start方法之后,该线程就处于一种就绪状态。
first.start(); //处于一种就绪状态
就绪状态的线程才有资格获取CPU分配的时间片来执行
(3)运行状态
如果处于就绪状态的线程获得了CPU分配的时间片,就
会调用run方法执行,此时该线程就处于运行状态。
(4)阻塞状态
当一个线程开始运行后,它不可能一直处于运行状态,线程在运行过程中可能会被中断。出现以下情况,该线程会进入一个阻塞状态:
①线程调用了sleep()方法,睡眠
②线程调用了IO相关方法,IO流
③得不到CPU时间片
被阻塞的线程会在合适的机会重新进入就绪状态,等待CPU
的调用。
(5)死亡状态
结束后的线程就处于死亡状态
出现如下情况会自动结束线程,进入死亡状态
①run()方法正常执行完了
②线程出现了异常或者错误
③直接调用线程的stop方法结束线程
5)线程操作
(1)join线程
在一个程序中,分为主线程和子线程,一般main方法会称
为主线程。通过main方法主线程可调用其它子线程。
在默认情况下,在主线程中调用子线程的时候,如果子线程
里需要进行大量的、耗时的运算,则主线程往往在子线程结
束之前结束。
但是如果主线程在处理其他的事务后,需要用到子线程的处
理结果怎么办要主线程等待子线程执行完毕后在结束
掉主线程。完成该效果就需要使用join操作。
(2)后台线程
线程还可以分为后台线程和前台线程。默认情况下创建的
线程都是前台线程。
isDaemon()方法可以判断一个线程是前台线程还是后台
线程。true表示后台线程,false表示前台线程。
后台线程会随着主程序的结束而结束,但是前台线程不
会,一般把后台线程也比喻为守护线程。
setDaemon(true)方法可以设置线程为后台线程/守护线
程,该方法必须在start()方法前调用,否则会出异常。
(3)线程睡眠
如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,可以通过调用Thread类中的sleep()方法来实现。
Thread.sleep(毫秒数);
(4)线程让步
Thread.yield()方法的作用是:暂停当前正在执行的线程,并
执行其他线程。
使用yield()方法的目的是为了让相同优先级的线程获得更
多的执行机会,但是实际中无法保证yield()方法达到让步的
目的,因为CPU不可控制性,让步的线程还有可能被线程
再次分配时间片。
CPU–>t1线程 yield()
t2线程
t3线程
(5)线程优先级
线程是存在优先级的,优先级的范围在1~10之间。CPU会
基于优先级抢先调度机制。
通过setPriority(数字)方式更改线程的优先级,线程默认的优
先级是5。
Thread类中有三个常量定义线程优先级范围:
Thread.MAX_PRIOMARY 线程最高优先级,等于10
Thread.MIN_PRIOMARY 线程最低优先级,等于1
Thread.NORM_PRIOMARY 线程默认优先级,等于5
6) 线程安全问题
(1)线程安全
可以在计算机中运行各种计算机软件程序,在每一个运行的程序中可能会包含多个独立运行的线程。当多个线程同时读写同一份共享资源的时候,可能会引发冲突。这个时候需要引入线程同步机制,解决线程安全问题。线程同步理解为让各个线程之间要有顺序。
线程同步的真正意义是一个一个的对共享资源进行操作,而不是同时进行。
(2)线程并发的案例演示
线程的特性就是并发执行:各自执行,互补干扰。
案例:一对夫妻拿着相同的银行卡号去银行取钱,一个人拿着存折,一个人拿着银行卡;假如卡里有2000元,丈夫取钱1500元,妻子在同一时间也取前1500元,如果取钱这段程序没有进行同步,丈夫和妻子取钱是同时进行(并发执行),当丈夫取钱1500,妻子也可以取1500,两人共取出3000元。
(3)解决线程安全问题–线程同步–加锁
Java中提供了一个同步锁,使用synchronized给一段代
码加同步锁。
10、Java中的网络编程
基于TCP协议的网络编程
1)TCP协议
TCP协议是一种可靠的网络协议,通信两端的Socket让他们之间形成网络虚拟链路,两端的程序可以通过虚拟链路进行通讯。
Java使用Socket对象代表两端的通信端口,通过Socket产生的IO流进行通信。
2)C/S架构的设计:客户端和服务器端
服务器端:ServerSocket
服务器端的ServerSocket对象使用accept()方法来用于监听来自于客户端的Socket连接请求,如果接收到了客户端Socket的连接请求,该accept()方法会返回一个与客户端对应的Socket对象。
如果没有Socket端发送过来的连接请求,该方法会一直处于等待状态。
客户端:Socket
主要用于设置连接请求的ip地址和端口号
11、面向对象的编程思想
对象:以程序员的角度看,任何一个合理的事务都可以看成是一个对象。比如:学生对象,手机对象,电脑对象,书对象…。
“万物阶段对象”
Java中是通过类(Class)来表示现实中的对象
现实 java
对象 = 类Class
学生对象 = public class Student{ }
特征 属性
学号 int id;
姓名 String name;
年龄 int age;
性别 char sex;
成绩 double score;
行为 方法
学习行为 public void study(){ … }
吃行为 public void eat(){ … }
书 == java public class Book{ }
特征 属性
书名 String bookName;
作者 String author;
价格 double price;
出版社 String publishing;
出版时间 Date time;

捕鱼达人项目:鱼对象 public class Fish{ }
渔网对象 public class Net{ }
池塘对象 public class Pool{ }
池塘对象—>鱼对象—>渔网对象

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页来源:且放白鹿青涯间

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月12日
下一篇 2020年6月12日

相关推荐