Java--sleep()和wait()区别
Java–sleep()和wait()区别对照代码来解释比较好理解
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package com.Thread;public class ThreadTest { private static Object lockedObject = new Object(); public static class WaitRunner implements Runnable{ @Override public void run() { synchronized (lockedObject){// long startTime=System.currentTimeMillis(); //获取开始时间 System.out.println(" ...
Java基础--Java反射和应用(未写完)
Java基础–Java反射和应用什么是反射反射就是指程序在运行的时候知道一个类的自身信息。
对于任何一类:可以知道这个类的属性和方法
对于任何一个对象:可以调用这个对象的任何一个方法和属性
反射就是将Java类中的各种成分映射成一个个Java对象
获取class文件对象的三种方式
Object类的getClass()方法
123456//1.在内存中新建一个Person的实例,对象p对这个内存地址进行引用Person p = new Person();//2.对象p调用getClass()返回对象p所对应的Class对象Class<?> cls = p.getClass();//3.调用newInstance()方法让Class对象在内存创建对应的实例,并且让p2引用实例的内存地址Person p2 = (Person)cls.newInstance();
静态属性class
Class类中静态方法forName()
Java--多线程
Java–多线程相关介绍线程有哪些基本状态
状态名称
说明
NEW
初始状态,线程被构建,但是还没有调用start()方法
RUNNABLE
运行状态,Java线程将操作系统中的就绪和运行两种状态,笼统称为运行中
BLOCKED
阻塞状态,表示线程阻塞于锁
WAITING
等待状态,表示线程进入等待状态,进入该状态标识当前线程需要等待其他线程做出一些特定的动作(通知或中断)
TIME_WAITING
超时等待状态,该状态不同于WAITING,它可以在指定的时间自行返回的
TERMINATED
终止状态,表示当前线程已经执行完毕了
wait
进入等待释放,线程释放持有的锁
wait()方法返回,线程获取到锁,进入等待队列
wait(long)
进入timeed_waiting状态时,释放当前持有的锁
wait(long)方法返回,线程获取到锁,进入等待队列
notify()
唤醒一个线程从等待队列进入同步队列中,不会释放当前持有的锁。
notifyAll()
将等待队列中的所有线程移到同步队列中,不会释放当前持有的锁
...
Java基础--Map集合
Java基础–Map集合HashMap与HashTable的区别
线程安全:HashMap非线程安全,HashTable非线程安全的,因为hashTable内部方法基本经过synchronized修饰
效率:HashMap因为非线程安全,执行效率比HashTable高一点(但HashTable现在基本不用了)
kv是否可为空:HashTable不允许,HashMap允许有一个null的键,但可以允许有多个null的值
初始值与扩容:
HashTable:初始默认11,若给定了初始值就使用给定值,扩容2n+1
HashMap:初始默认16,若给定初始值不够2的幂次方,则自动扩充为2的幂次方,(也就是说HashMap总是以2的幂来作为哈希表的大小)扩容2n
底层数据结构:
HashTable:数组+链表
HashMap:数组+链表(Jdk1.8以前)
Java--Mybatis-日志
Mybatismybatis中内置的:
SLF4J
LOG4J 【掌握】
LOG4J2
JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING 【掌握】
NO_LOGGING
具体实现,在设置中设置
使用步骤:
1、导入log4j的包
12345<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>
2、配置文件编写
123456789101112131415161718192021222324#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码log4j.rootLogger=DEBUG,console,file#控制台输出的相关设置log4j.appender ...
Java--Mybatis-4
Mybatis解决属性名和字段名不一致的问题
resultMap
方案一:为列名指定别名 , 别名和java实体类的属性名一致 .
123<select id="selectUserById" resultType="User"> select id , name , pwd as password from user where id = #{id}</select>
方案二:使用结果集映射->ResultMap 【推荐】
1234567891011<resultMap id="UserMap" type="User"> <!-- id为主键 --> <id column="id" property="id"/> <!-- column是数据库表的列名 , pro ...
Java--Mybatis配置解析
Mybatis
核心配置文件mybatis-config.xml
Mybatis的配置文件包含了会深深影响Mybatis行为的设置和属性信息
12345678910111213configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源)databaseIdProvider(数据库厂商标识)mappers(映射器)
环境配置Mybatis可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
默认事务管理器为:JDBC,连接池POOLED
数据源
dbcp
c3p0
druid
配置文件可以通过properties属性来实现引用配置文件
这些属性都是可外部配置且可动态替换的,既可以在电信的ja ...
Java--Mybatis-2
Mybatisnamespace 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
select选择,查询语句
id:就是对应的namespace中的方法名
resultType:Sql语句执行的返回值
parameterType:参数类型
需求:根据id查询用户
1、在UserMapper中添加对应方法
123456public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id);}
2、在UserMapper.xml中添加Select语句
123<select id="selectUserById" resultType="com.kuang.pojo.User">select * from user where id = ...
Java--Mybatis
Mybatis
回顾:需要了解JDBC,MySQL,Java基础,Maven,Junit
简介 MyBatis 是一款优秀的持久层框架
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
持久化内存断电即失,数据库jdbc,io文件持久化
为什么需要持久化——有些对象不能丢弃,内存太贵
持久层就是完成持久化工作的代码,每个层之间的界限十分明显
其他中文文档地址: https://mybatis.org/mybatis-3/zh/index.html
优点:简单,sql写在xml文件中,与java代码解耦
第一个Mybatis程序流程:搭建环境–导入Mybatis–编写代码–测试
搭建数据库
1234567891011121314151617CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(20) NOT NULL,`name` varchar(30) DEFAULT NULL,`pwd` varcha ...
Java--Java基础
Java和C++的区别
都是面向对象的,支持继承,封装,多态
Java没有多继承,但是C++有
Java没有指针,但是C++有
Java没有手动内存管理(有JVM),但C++有
Java面向对象的三个特性
封装:将属性私有化,同时提供一些可以被外界访问的属性的方法
继承:使用已有的类的定义作为基础建立新类的技术,可以选择性增加功能,或属性
多态:引用变量指向的具体对象不在程序编译时绑定,而在运行时绑定
String,StringBuilder和StringBuffer的异同点
String是用final修饰的字符数组来保存字符串,所以String是不可变的,其他两个都是继承自AbstractStringBuilder类,这个类中不是用final修饰的,,所以这两个对象是可变的
String可以理解位常量,线程安全
StringBuilder没有对方法加同步锁,所以是非线程安全的
StringBuffer对方法加锁了,所以是线程安全的
总结:操作少量数据用String,单线程下操作大量数据用StringBuilder,多线程下操作大量数据用StringBuffer
基本数据类 ...