java基础

计算机中全部采用二进制数表示:

  • 十进制数据转换二进制数据:除以2获取余数
    在这里插入图片描述
  • 二进制数据转成十进制数据:使用8421编码方式
    在这里插入图片描述

常用DOS命令:

命令操作符
盘符切换盘符名:
查看当前文件夹dir
进入文件夹命令cd 文件夹名
返回上一层cd . .
退出到根目录cd\
清屏cls

java开发环境搭建:

  • jvm:java虚拟机,java运行环境
  • jre:java程序的运行时环境,包含jvm和运行时所需要的核心类库
  • jdk:java程序开发工具包
    在这里插入图片描述

开发一个java程序,必须要安装jdk

环境变量的配置
JAVA_HOME:jdk的根目录
Path:%JAVA_HOME%\bin;

基本数据类型:

数据类型关键字内存占用取值范围
字节型byte1个字节-128~127
短整型short2个字节-32768~32767
整型int(默认)4个字节-231次方~2的31次方-1
长整型long8个字节-2的63次方~2的63次方-1
单精度浮点数float4个字节1.4013E-45~3.4028E+38
双精度浮点数double(默认)8个字节4.9E-324~1.7977E+308
字符型char2个字节0-65535
布尔类型boolean1个字节true,false

数据类型转换

  • 自动转换:将取值范围小的类型,自动提升为取值范围大的类型(低精度转高精度)

    byte、short、char‐‐>int‐‐>long‐‐>float‐ ‐>double

  • 强制转换:将 取值范围大的类型 强制转换成 取值范围小的类型(高精度转低精度)

    转换格式:
    数据类型 变量名 = (数据类型)被转数据值;

三元表达式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2

true:取结果1
false:取结果2

流程控制语句:

  • if()
if(关系表达式){
语句体;
}

在这里插入图片描述

  • if…else
if(关系表达式) {
语句体1;
}else {
语句体2;
}

在这里插入图片描述

  • -if…else if…else
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}

在这里插入图片描述

  • switch
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}

在这里插入图片描述

switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。

  • for
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}

在这里插入图片描述

  • while
初始化语句①
while(判断条件②){
循环体③
控制条件语句④
}

在这里插入图片描述

  • do…while
初始化语句①
do{
循环体③
控制条件④
}while(判断条件②);

在这里插入图片描述

跳出语句:

  • break:终止循环
  • continue:跳出本次循环,进入下一次循环

重载:
同个类中,名称相同,参数不同,与修饰符和返回值类型无关
重写:
子类重写父类方法,返回值和形参都不能改变。

类和对象:
类是对象的模板,对象是类的实体。
类定义

public class ClassName {
//成员变量
//

方法的使用

类名 对象名 = new 类名();
对象名.成员变量;
对象名.成员方法();

内存:
栈内存:存放一些基本类型的变量和对象的引用变量。
堆内存:存放new创建的对象和数组。

抽象类:
包含抽象方法的类。

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

    假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

    子类的构造方法中,有默认的super(),需要访问父类构造方法。

  3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设
    计。

  4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象
    类。

    假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有
    意义。

抽象方法 :
没有方法体的方法。

修饰符 abstract 返回值类型 方法名 (参数列表);

接口:
是方法的集合。它不能创建对象,但是可以被实现

public interface 接口名称 {
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}

多态:
是指同一行为,具有多个不同表现形式。

父类类型 变量名 = new 子类对象;
变量名.方法名();

权限修饰符:
在这里插入图片描述

多线程:

  • 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多
    个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;
  • 线程:线程是进程中的一个执行单元。

现Runnable接口比继承Thread类所具有的优势:

  1. 适合多个相同的程序代码的线程去共享同一个资源。
  2. 可以避免java中的单继承的局限性。
  3. 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。
  4. 线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类。

线程同步:

  • 同步代码块: synchronized 关键字可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。
synchronized(同步锁){
需要同步操作的代码
}
  • 同步锁:只是一个概念,可以想象为在对象上标记了一个锁.
    1. 锁对象 可以是任意类型。
    2. 多个线程对象 要使用同一把锁。

    注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外等着
    (BLOCKED)。

public class Ticket implements Runnable{
private int ticket = 100;
Object lock = new Object();
	/*
	* 执行卖票操作
	*/
	@Override
	public void run() {
		//每个窗口卖票的操作
		//窗口 永远开启
		while(true){
			synchronized (lock) {
				if(ticket>0){//有票 可以卖
					//出票操作
					//使用sleep模拟一下出票时间
					try {
					Thread.sleep(50);
					} catch (InterruptedException e) {
					// TODO Auto‐generated catch block
					e.printStackTrace();
					}
					//获取当前线程对象的名字
					String name = Thread.currentThread().getName();
					System.out.println(name+"正在卖:"+ticket‐‐);
				}
			}
		}
	}
}
  • 同步方法:使用synchronized修饰的方法,就叫做同步方法,保证A线程执行该方法的时候,其他线程只能在方法外
    等着。
public synchronized void method(){
可能会产生线程安全问题的代码
}
public class Ticket implements Runnable{
private int ticket = 100;
	/*
	* 执行卖票操作
	*/
	@Override
	public void run() {
	//每个窗口卖票的操作
	//窗口 永远开启
		while(true){
			sellTicket();
		}
	}
/*
* 锁对象 是 谁调用这个方法 就是谁
* 隐含 锁对象 就是 this
*
*/
	public synchronized void sellTicket(){
		if(ticket>0){//有票 可以卖
		//出票操作
		//使用sleep模拟一下出票时间
			try {
			Thread.sleep(100);
			} catch (InterruptedException e) {
			// TODO Auto‐generated catch block
			e.printStackTrace();
			}
			//获取当前线程对象的名字
			String name = Thread.currentThread().getName();
			System.out.println(name+"正在卖:"+ticket‐‐);
		}
	}
}
  • Lock锁
    • public void lock() :加同步锁。
    • public void unlock() :释放同步锁。
public class Ticket implements Runnable{
private int ticket = 100;
Lock lock = new ReentrantLock();
	/*
	* 执行卖票操作
	*/
	@Override
	public void run() {
		//每个窗口卖票的操作
		//窗口 永远开启
		while(true){
			lock.lock();
				if(ticket>0){//有票 可以卖
					//出票操作
					//使用sleep模拟一下出票时间
					try {
					Thread.sleep(50);
					} catch (InterruptedException e) {
					// TODO Auto‐generated catch block
					e.printStackTrace();
					}
					//获取当前线程对象的名字
					String name = Thread.currentThread().getName();
					System.out.println(name+"正在卖:"+ticket‐‐);
				}
			lock.unlock();
		}
	}
}

线程状态:
java.lang.Thread.State 这个枚举中给出了六种线程状态:

线程状态导致状态发生条件
NEW(新建)线程刚被创建,但是并未启动。还没调用start方法。
Runnable(可运行)线程可以在java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操作系统处理器。
Blocked(锁阻塞)当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。
Waiting(无限等待)一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态。进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。
Timed Waiting(计时等待)同waiting状态,有几个方法有超时参数,调用他们将进入Timed Waiting状态。这一状态将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有Thread.sleep 、Object.wait。
Teminated(被终止)因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。

************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值