一、java基本格式

public class Demo1{
//公共的类的类名必须和文件名一致
public static void main(String[] args){
//java的输出语句,先输出后换行
System.out.println(“Hello world”);
//java的输出语句,输出之后不换行
System.out.print(“Hello world”);
System.out.print(“Hello world”);
}
}
**

  1. 二、java标识符

**
java严格区分大小写:
1、标识符:取名字 规则
1.严格区分大小写
2.关键字(所有颜色不是黑色的都是关键字)不能是标识符
3.所有标识符都是由字母,数字,_,美元符号$组成
4.数字不能够开头
2、标识符:规范
1.见名知意
2.驼峰命名
1.包名:全部小写
2.类名每个单词的首字母大写 GetName
3.变量名和方法名,首个单词小写,之后每个单词首字母大写 getName
4.常量:所有单词全部大写单词和单词之间用下换线连接 GET_NAME

三、数据类型

数据类型 变量名 = 值
数据类型:2大类
1、基本数据类型 8个
1.整型
byte 1个字节 8bit 2^8=256 -128—127
short 2个字节 16bit 2^16=65536
int 4个字节 32bit 2^32=
long 8个字节 64bit
long比较特殊,使用long类型的时候需要在数值后面加上L
按照理论来说我们所有的数据类型肯定是选择合适的,内存空间不浪费
但实际来说,他的这个浪费的空间可以忽略不计,所以一般整数都使用int
2.浮点型
float 使用float类型的时候需要在数值后面加上F f
double
3.字符
char
4.布尔类型
Boolean
2、引用数据类型
3、基本数据类型的类型转换

  1. 自动类型转换:小的类型会在和大类型做运算的时候进行自动类型转换
    基本数据类型从小到大:
    byte short int long float double char
    2.强制类型转换:大类型数据转成小类型数据
    语法 小类型的变量 = (小数据类型)大类型数据

四、运算符

1、算术运算符:+ - * / % ++ –
注意:
+:当他的左右2边都是数字的时候做相加操作,
当左右2边有字符串的时候做连接符号(拼接)
/:因为自动类型转换 在java中整数除以整数结果是整数
%:a%b a为正数,不管b是正是负,结果都为正
a为负数,不管b是正是负,结果都为负
++:在单目运算中,++在前和++在后没有区别,都是自增1
在双目运算中,++在前,会先自增1,然后再运算,
++在后,会先运算,然后再自增1
2、赋值运算符:+= -= *= /= =
3、比较运算符:> >= < <= != == 比较对象:instanceof
4、逻辑运算符:左右2边必须都是boolean值
&&:短路与:先判断左边,若左边为ture,再判断右边,若左边为false则 不再判断右边,直接返回false
||:短路或:只要有1个为真,结果为真,跟短路与是一个道理
!:非:!true=false
^:或异:一真一假为真,同真同假为假
&:逻辑与
|:逻辑或
5、位运算符:左右2边必须都是数字
进制 进制的转换
& | ! ^
先转换成为2进制,然后再进行计算
&: 1表示true 0表示fasle 有1个0结果就是0 2者都是真,结果为真,
有1个假,结果就是假
|:有1个1结果就是1
!:1结果是0,0的结果是1
^:1个0,1个1结果是1,2个1或者2个0 结果是0
6、三目运算符
A?B:C

五、流程控制

顺序结构:从上到下,从左到右
1、分支结构:
switch:等值判断
switch(变量){
case 值:
代码
break;

default:
代码
}
if:等值判断,范围判断 只能是boolean值
if—else
if—else if —else
2、循环结构
1.while
2.do-while 先执行,后循环,至少会执行一次
3.for
break:结束循环和分支
continue:结束本次循环进入下一次循环

加粗样式六、函数

1、语法[public static]  void(返回值)/数据类型    函数名(参数列表){如果是void,则表示没有返回值,如果函数有返回值则需要加上数据类型return  值;//值和返回值的数据类型一致}

2、看一个函数 是否有返回值
1.明确说明要返回值
2.但是这个返回执行完之后,需要他的结果在其他方法中操作
3.上述2者都是没有的,那就先当做没有返回值处理,然后再看方法是否符合要求
3、4种情况
1.没有参数没有返回值
public static void 函数名(){
}
在main方法中调用
函数名();
2.没有参数有返回值 (假如返回值时int类型的)
public static int 函数名(){
return 10;
}
在main方法中调用
int rest = 函数名();
-------------假如返回值时String类型的------------------
public static String 函数名(){
return “—”;
}
在main方法中调用
String rest = 函数名();
3.有参数没有返回值
public static void 函数名(参数){
}
在main方法中调用
函数名(值);
4.有参数有返回值
-------------假如返回值是int类型的------------------
public static int 函数名(参数){
return 10;
}
在main方法中调用
int rest = 函数名(值);
-------------假如返回值是String类型的------------------
public static String 函数名(参数){
return “—”;
}
在main方法中调用
String rest = 函数名(值);
函数和函数之间可以相互调用
4、重载
同一个类中,同一个函数名
参数的个数不同,参数的顺序不同,参数的类型不同
就会形成重载(重载和返回值没有关系)
4、递归
自己调用自己
解决复杂的代码的,方便阅读,但是执行效率很低,可以不用尽量不用

七、数组

1、特点
1.数组一旦声明其大小不可改变
2.数组是引用数据类型,但是数组可以被定义存储任意数据类型数据
3.数组的类型必须是一致的
4.数组有默认值,默认值就是定义的类型的默认值
5.数组有顺序,通过下标定义顺序 下标从0—length-1
2、声明和赋值
1.动态初始化
通过下标赋值
举例子: int [] arr ;
//声明一个变量这个变量是数组类型的,他的名字叫arr
arr = new int[3];
//给开辟一个空间这个空间3个大小没有值,把这个空间赋值给变量arr
int [] arr = new int[3];
arr[0] = 12;
2.静态初始化
int [] arr = {1,2,3}
//声明一个变量,类型是数组,名字是arr,开辟1个空间里面3个大小
值为1,2,3 吧这个空间赋值给arr变量
int [] arr = new int[]{1,2,3}
//声明一个变量,类型是数组,名字是arr,开辟1个空间里面3个大小
值为1,2,3 吧这个空间赋值给arr变量
3.默认初始化
每个数组都有默认值
3、操作
1.冒泡排序 是比较相邻的2个数
第一个循环,循环的是比较次数
第二个循环,循环的是下标
public static void sore(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int a = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = a;
}
}
}
System.out.println(Arrays.toString(arr));
}
2.增删改
数组的扩容
1.创建1个新的数组(数组的大小比比旧的数组大)
2.把旧数组中所有数据全部复制到新数组中
3.把新数组的地址复制给旧数组
3.查询
foreach循环遍历数组:
for(遍历出来数据的类型 变量名:需要遍历的数组、集合){
变量名就是集合、数组中的值
}
length—长度用来遍历下标 for循环
4. 其他
Arrays.toString(arr)---------输出数组中的元素
Arrays.CopyOf(arr,len)----------------将数组arr变成len长度

4、二维数组—了解
int [][] arr = new int[一条烟中多少包][一包烟中多少支];
每一包中的根数是相同
变量-------一支烟
一维数组-------一包烟,一包中可以有多支
二维数组------一条烟,一条烟中有多包,1包中又可以有多支
int [][] arr = new int[3][10];
arr.length----这条烟有多少包
arr[0].length----第一包有多少支
//每一包中个数都是再定义,可以设置不一样
1.动态初始化
int [][] arr = new int[10][];—这条烟有10包
arr[0] = new int[12];----第一包10支
arr[1] = new int[2];----第二包2支
2.静态赋值
int[][] arr = {
{1,2,3},
{12,34}
}

八、对象和类

1、定义类的语法
public class 类名{
//1.属性----名词----成员变量
//2.函数,方法-----动词----成员方法
}
2、定义对象的语法
类名 变量名 = new 类名();
访问属性:对象名.属性名 = 值 ; 对象名.属性名
方法方法:对象名.方法名();
3、类和对象在内存中的分析
4、构造方法
每个类中都有1个隐藏的无参数的构造方法
但是当我门写了有参数的构造方法之后,无参数的构造方法就没了,需要手动添加
作用:
1.创建对象 new+构造方法(构造器)----创建对象
2.用来初始化成员变量
语法
public 类名(){}//隐藏的构造方法

加粗样式九、封装

1、提供了4个权限修饰符
public:公共的 整个项目中所有都可以访问他(项目可见性)
protected:受保护的 当前包以及其子类
default:默认的 当前包(包可见性)
private:私有的 当前类 (类可见性)
2、为什么要封装
1.封装可以方便访问
2.数据安全性
3、权限修饰符
public:公共的 一个文件中可以有多个类,但只允许有一个公共类 项目可见性
构造方法并不只所有的都有public 修饰的,它是根据类来的,类是被public修饰的,那构造方法也是被public修饰的。
Protected:受保护的
default:普通的(默认) 包可见性
private:私有的
1.给私有属性提供setter(设置私有属性的值)和getter(获取私有属
性的值)方法
2.方法名有要求 set+属性名(首字母要大写) get+属性名(首字母
大写)
public protected default private
类,构造方法 √ √
属性 √ √ √ √
方法 √ √ √ √

这三个都可以被4个权限修饰符修饰
重点在属性私有化,提供getters和setters方法
4、this关键字:this指当前对象本身
1.访问方法 :访问当前类中的方法,可以省略this
2.访问属性:当成员变量和局部变量同名的时候,使用this.属性表示成员变量
3.访问构造方法:this(值)—表示调用当前类中的构造方法

**十、继承
**
继承和ts中也是一样的
1、extends关键字----继承父类非私有的属性和方法
扩展类的功能
注意:不能多继承,可以多层次继承
2、super:指父类本身
1.访问方法 ://访问当前父类中的方法,使用super.方法();
2.访问属性:super.属性—访问父类属性
调用父类的属性的时候,可以省略super,继承了属性,可以直接调用
3.访问构造方法:super(值)–调用的是父类的构造方法,只能写在第一行

3、重写:当父类的方法不满足子类的需求的时候就需要重写,重写只改变方法体
重写是覆盖子类继承父类的这个方法,在子类中覆盖,和父类本身方法无关

十一、toString
toString是顶级父类object的方法,在输出对象时会自动调用这个方法,如果不重写这个方法,直接输出对象时,输出的是储存这个对象的地址,所以在一般类中都会重写toString这个方法,重写为输出对象的属性。快捷方式:Source>Generate toString()…

十二、equals

equals是顶级父类object的方法,是用于比较的,在Object中他的比较是用“”进行比较的,基本数据类型使用“”比较的是值,引用数据类型使用“”比较的是地址,
如果我们使用equals进行比较引用数据类型,如果没有重写equals就是使用“
”进行比较的,所以如果要使用equals进行引用数据类型值的比较,我们就要重写equals方法(自定义的类),有些地方会直接说:equals比较的是引用数据类型的值,不是地址,==比较的才是地址。快捷方式:Source>Generate equals()…

十三、abstract

抽象类:用来当做父类给子类继承,并且要求子类必须重写抽象方法
1.使用abstract修饰类
2.不能创建对象–创建对象是是否构造方法来的
3.在抽象类中可以定义普通类中定义的所有(变量,常量,方法,构造方法)
4.抽象方法没有方法体,加上abstract修饰方法

十四、final

final修饰变量的是常量
1、final修饰方法—方法不能被重写
2、final修饰的类----是不能被继承的
3、抽象类是否可以使用final修饰:不可以
因为抽象类被定义出来就是供子类继承的,而final修饰的类不能被继承,两者相悖,所以不可以

十五、static(静态的)

static修饰属性和方法
static修饰的都是属于类的,整个类只有1份,那么根据类创建的对象也都只有这一份,如果没有static修饰,那么每个对象在创建的时候都会有各自的一份
static修饰的是在第一次使用类的时候,进行加载,整个类中只加载1次
第一次使用类,并不等于第一次创建类
Student(第一次使用类) d = new Student()(第一次创建类);

static修饰的是类的,在第一次使用类的时候加载,第一次使用类的时候可能还没有对象,非static修饰的是对象的,有对象的时候肯已经使用了类,加载过static修饰(new Student();)
1.在static的方法中,不能够直接调用非static的方法和属性,因为这个时候可能还没有对象,也就是可能还没有非static的方法和属性
2.可以创建对象调用,也可以不创建对象调用
3.不能有this,this指的是对象,同1
4.非static中,可以调用静态的属性和方法

使用static修饰的方法或属性:
1.创建对象访问
2.类名.方法 类名.属性

十六、多态

1、面向对象有3大特征:封装、继承、多态
2、多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
3、多态:
1.必须有继承或者是实现
2.方法有重写
3.父类的引用指向子类的对象
4、多态使用(重点):

  • 1.多态的情况下,不能够调用子类的独有的方法
  • 2.多态的情况下,调用的是父类的属性和方法,如果子类方法重写了父类的方法,那他调用的就是子类的重写方法
  • 3.多态的情况下,调用的是父类的属性,不调用子类的属性
    5、父子转换
    1.子转父
    引用数据类型的自动类型转换
    Animals an = new Dog();
    2.父转子
    向下转换—为了调用子类独有的
    Dog d = (Dog)an;

十七、联级

1、MVC:(适用于界面是HTML)
M:model—模型 --数据层和实体层—模型
V:view----视图----界面
C:controlle—控制层
2、java控制台模拟使用三层架构

十八、常用类

1、Scanner
扫描器—控制台输入—实际作用并不大 new Scanner(System.in)
nextInt—获取键盘输入的int数据
next-----获取键盘输入的字符串
nextDouble-----获取键盘读入的double数据
nextLine—不推荐大家使用

2、System—系统类–当前Java运行的平台
out in err----输出 输入 错误输出
3、Object----顶级父类
equals-----比较,在object中使用==进行,子类需要比较时候重写
toString----自动调用,输出对象的时候自动调用,object中返回时对象的地址, 子类一般重写,返回属性信息
hashcode----返回的是一个对象的哈希值(集合)
getClass----获取对象的class对象(反射)

4、Math:数学类,提供了一些常用的方法
Math.abs(1);//绝对值
Math.ceil(12.4);//向上取整
Math.floor(12.4);//向下取整
Math.sqrt(9);//开平方
Math.max(12, 1);//最大值
Math.min(1, 23);//最小值
Math.pow(2, 3);//2的3次方
Math.round(12.3);//四舍五入,取整
Math.random();//随机数[0,1)

5、String,StringBuilder,StringBuffer(重中之重)
1.String:是字符串,不可变字符,final修饰,不可以被继承

// str.charAt(index)-----获取指定下标的字符
// str.length()-----------字符串中字符的个数
// str.compareTo(anotherString)-----比较2个字符,返回1大于 0等于 -1 小于
// str.equals(anObject)----比较等于true,不等于false
// str.concat(str4)-----拼接字符串
// str.contains(s)------判断是否包含字符串
// str.getBytes()-----把字符串转换成为byte数组
// str.indexOf(ch)----返回第一个该字符的下标
// str.lastIndexOf(ch)----返回最后一个该字符的下标
// str.replace(oldChar, newChar)----替换
// str.isEmpty()-----判断是否为空—true表示空
// str.split(regex)------分割
// str.trim()------去掉字符串左右2遍的空格
// str.substring(beginIndex, endIndex)----截取字符串,从开始下标到结束 下标(包头不包尾)
// str.substring(beginIndex)–从该下标截取字符串到末尾
2.StringBuilder,StringBuffer
StringBuilder:可变字符,final修饰,不可以被继承,线程不安全(效率高)
append()—追加字符串
StringBuffer:可变字符,final修饰,不可以被继承,线程安全(效率低)
StringBuffer需要进行线程同步操作,其性能要比StringBuilder要差但是适用于多线程并发。
3.使用
1)什么时候使用StirngBuilder什么时候使用StringBuffer:
1个是线程不安全的,1个是线程安全的,在多个线程的情况下我们才会使用Buffer,大部分情况下都是单线程的情况,这个时候使用StringBuilder
2)什么时候使用String,什么时候使用StringBuilder
1个是不可变字符序列,1个是可变字符序列,String他操作之后会生成 新的字符,而不是在,原有的字符上进行改变,所以适用于少量字符的操作,
StringBuilder是可变字符序列,所以大量字符操作使用StringBuilder,而且 StringBuilder的append方法比+=更加方便而且明确

*十九、时间
*
1、Date(方法已过时)
获取当前时间 new Date()
获取时间戳 getTime()
年月日时分秒-----year month+1 date hour minute second
2、Calendar
Calendar.getInstance()-----创建Calendar对象
年月日时分秒-----get(Calendar.YEAR) MONTH+1 DATE HOUR MINUTE SECOND
3、时间格式化
SimpleDateForMate:国际化
格式:yyyy–年 MM—月 dd----日 hour、Hour—小时 mm—分钟 ss—秒

  1. 把时间对象转换成为一定格式的字符串—formate
  2. 把一定格式的字符串转换成为时间对象—parse
    案例:
    //2010-2-12 12:23:34 把字符串依照这个格式进行转换成为时间对象—把时间对象按照这个格式转换成为字符串
    SimpleDateFormat formate = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
    //把字符串依照这个格式进行转换成为时间对象
    try {
    Date parse = formate.parse(“2010-2-12 12:23:34”);//parse这个方法把字符串和规则一样转换成为时间
    System.out.println(parse.toLocaleString());
    }catch(Exception e) {
    e.printStackTrace();
    System.out.println(“格式不正确”);
    }
    //把时间对象按照这个格式转换成为字符串
    Date date = new Date();
    String format = formate.format(date);//format这个方法把时间按照规则转换
    System.out.println(format);

二十、堆栈内存分析

cpu在运行过程中,代码所占内存
堆:存放new出来的(不管代码写在哪里,只要是用过new)。开辟的空间
1.垃圾回收机制----不定时回收----开辟空间少,耗费内存就少
栈:写在方法中的变量(局部变量) 数据类型 变量名; (int num , Person p)
先进的后出,而且属于一个方法结束,他的先进的后出
栈中内存存在cpu中的时间对于堆中来说,时间相对较短
方法区:加载一个类的时候,加载的代码。我们在使用1个类的时候
他需要先进行加载1个类,这些,代码都会加载进我们的方法区
常量池:存放static修饰的变量,或者是常量,以及字符串常量
“1” “abc” “你好”

二十一、包装类

所有的基本数据类型都有对应的包装类
基本数据类型首字母大写变成包装类
byte------------Byte
short-----------Short
int-------------Integer----特殊
long------------Long
double----------Double
float-----------Float
boolean---------Boolean
char------------Character—特殊
注意事项:
1.基本数据类型,各自有各自的默认值,但是包装类的默认值都是null
2.所有的基本数据类型会自动包装成包装类,包装类会自动拆箱成基本数据类型
自动装箱----基本数据类型自动转换成为包装类
自动拆箱----包装类自动转换成为基本数据类型
3.基本数据类型上没有方法,所以包装类是提供一些关于基本数据类型的方法
包装类就是解决基本数据类型没有方法这个缺点
常用的方法:
int num = Integer.parseInt("")----把字符串转换成为数字int类型
double num = Double.parseDouble("")----把字符串转换成为数字double类型

二十二、异常

Throwable----是error和exception的父类基类
error :是系统异常 ,error 是系统异常 ,通常很难解决。通常很难解决
exception:exception是语法的问题或者逻辑的问题,可以通过改变代码的方式来解决
堆栈溢出错误
1、编译时异常(受检时异常)
常见的受检时异常:IOException FileNotFoundException 等
2、运行时异常:run运行才出现的
常见的运行时异常:下标越界 NullPoint ClassCastException
异常解决;
1、try–catch–finally
1.通过Try包裹可能会出现的异常代码,通过catch进行异常的捕捉,捕捉了对应的异常之后,执行catch中的处理方式—(具体的处理方法随需求定)
catch去捕捉异常的时候顺序一定是先子类—父类
写法可以是一个catch捕捉多个异常
在异常处理中finally里面代码不管return或者异常等问题时候都会被执行
finally可写可不写
2、throws
throws—声明这个方法有1个异常,最后给jvm处理 + 异常类型
在项目中一般是view层处理异常
throw—抛出异常 ,在方法中抛出异常
throw new Exception(); throw +异常对象
3、throw 自定义异常
提供了多个构造方法,通过super调用父类的构造方法,例:
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException(){
super();
}
public AgeOutOfBoundsException(String massage) {
super(massage);
}
// ArrayIndexOutOfBoundsException
public AgeOutOfBoundsException(int age) {
super(“年龄超出合理范围:”+age);
}
}

二十三、集合体系

变量:存储1个
数组:存储多个,[数组一旦创建大小是固定][数组中的数据类型必须相同]
集合体系:可以存储任意个数据,可以存储任意类型的数据

1、集合接口
Collection----------所有集合的父接口
List Set------2个子接口
list:存储的数据是有序的(下标),可以重复
set:存储的数据是无序的,不可以重复
Map----接口----他是key-value的格式,通过key找value

Iterator----迭代器接口----用来遍历集合
2、泛型

  1. 问题1:
    往集合中存储任何东西的时候,取出来进行操作时候不方便—如果存储的是同一样比如下面全部是学生,拿出来就是Object不是Student还要强转
    解决方法:
    泛型
    1.在集合中怎么使用泛型
    集合的特点:
    存储数据没有数量限制
    存储数据没有类型限制-----泛型进行类型限制
    new ArrayList<类型>()----表示创建的这个集合对象是有类型限制 的,整个集合中只能够存储这种类型的数据
    2.泛型的好处:
    数据安全
    数据不需要强转,类型不是Object类型
    一般情况下来说,如果存放的数据都是同一个类型,那么都需要使用泛型 99%都 是要是用泛型,泛型必须是引用数据类型
  2. 问题2:
    我有1个方法,这个方法是可以输入任意类型的
    解决方法1:
    public class Generics { //在创建对象的时候有1个类型E,在类中可以使用E这个类型
    /**
    • E:表示泛指的传入参数类型,传入的是E这个类型,返回值就是E这个类型
    • E在编译的时候是泛指1个类型,但是他具体根据谁来定类型
    • 在创建类的时候确定类
    • 添加的参数的类型和返回值的类型就必须和创建对象的类型一致
    • @param args
      /
      public E method3(E e) {
      return e;
      }
      }
      解决方法2:
      /
      *
    • 我们返回值的类型是由参数类型确定的,
    • 但是参数类型现在是不固定的
    • @param T—使用T泛指1个类型
    • 传入的类型是T,返回值类型就是T
    • T不能一直是泛指的,他在运行的时候是需要确定的。所以
    • 这个—这个T在调用方法的时候告诉你确定的类型
      */
      public T method2(T t) { //参数数据类型定义为T–这个T表示不固定
      return t;
      }

3、Collection具有的方法
add—添加1个元素
addAll—添加1个集合
clear----清空集合
contains—是否包含元素
containsall—是否包含集合中所有元素
equals—比较集合中对象
isEmpty—集合是否为空(没有元素)
iterator() ----遍历集合
remove----删除元素
removeAll----删除集合
size-----集合中元素的个数
toArray—把集合转换成为数组
4、List
具有collection中的所有方法
1.ArrayList:他的底层是数组实现的,增删慢,查找快,线程不安全,效率高(使用最多)
2.LinkedList:他的底层是双向链表实现的,增删快,查找慢
在ArrayList的基础上新增加了些方法 addFirst getFirst addLast getLast
在有特殊要求–和第一个数据以及最后一个数据相关的需求的时候使用
3.Vector:他的底层也是数组实现的,增删慢,查找快,他是线程安全,效率低
Vector他是属于线程安全的,只有在多线程情况下才会使用Vector
4.Stack:栈,先进的后出
push()—在最后添加
pop()—弹出最后一个,并删除
peek()—弹出最后一个,不删除
5.Queue:队列,先进的先出
offer()—在队伍的后面进行增加
poll()—弹出第一个,并删除
peek()—弹出第一个,不删除
6.遍历
for foreach iterator
5、Set:去除重复项,排序
1.TreeSet(必须实现compareble)
TreeSet他可以去除重复,底层是树实现
TreeSet去除重复,根据二叉树的原理
二叉树原理:右子树>左子树(节点和节点之间有大小之分)不会相等
在存入数据的时候,进行数据的大小比较(实现compareble 接口,实现compareTo)
2.HashSet(一般已经有的类都是重写了equals方法)
HashSet可以去除重复,底层是哈希表实现
HashSet去除重复的原理,根据哈希表的原理
哈希表原理:哈希值,equals(hashCode和equals重写还是不重写根据需求定)
如果hashSet存储数据,就根据需求去进行判断是否重复
hashCode方法就是用来获取哈希值的,每一个对象的哈希值不一样
hashSet是使用equals方法和hashCode
先比较hashCode值是否相等,如果hashCode值不相等那么就不 重复,HashCode不相等再比较equals方法,equals方法返回true表 示相等,false表示不相等
6、Map
K-V的存储,通过key找到value
创建:
// 泛型就是限制数据类型,map有key值的要求,也有value值类型的限制
HashMap<String, String> hashMap = new HashMap<>();
语法:
1.添加 put
2.查找 get keyset entrySet values
概念:
HashMap和HashTable都是底层散列表(哈希表)
HashMap的key值不能够重复,key和value都可以有null值
Hashtable的key不能够重复,key和value不能够用有null值,会报空指针异常,Hashtable是线程安全的,效率低

二十四、IO流

1、File—文件类
1.File:描述1个路径,这个路径可以是文件也可以是文件夹,而且这个路径可以是真实存在的,也可以是不真实存在。new File(“D:/a/b.txt”) new File(“D:/a”,”b.txt”)
2.方法
createNewFile---------------创建文件
mkdir------------创建文件夹(父路径必须存在)
mkdirs---------------创建文件夹(父路径可以不存在)
file.isFile----------------是否是文件
file.isDerectory-----------------是否是文件
delete---------------------------删除文件也可以是文件夹
file.exists-----------------------file描述的路径是否真实存在
getName---------------获取文件的名字 endsWith----------获取文件后缀
getParent----------------------获取父路径
canRead-----------------------可读
canWrite-----------------------可写
renameTo------------------------给文件改名
List------------------将该文件下所有文件名变成一个字符串集合
listFiles----------将该文件下所有文件对象变成一个File对象集合
2、IO流—字节流
1.在读取和写入过程中使用字节(可以操作图片,视频,音频等等),操作文字有可能出现乱码
2.输入与输出
输入流 输出流
抽象父类 InputStream(控制台输入可获得字节流) OutputStream
实现类1 FileInputStream FileOutputStream
使用 byte [] buf = new byte[1024];
Int len =is.read(buf);
write(buf,0,len); len:读取的字节个数放到数组,数组中字节的个数。-1表示文件结束

实现类2 BufferedInputStream BufferedOutputStream
使用 Buffered:缓存的意思,类中自带了1个数组进行缓存,他的读取和写入的速度会增快
创建:
new BufferedInputStream(new FileInputStream(“D:/a.txt”))
new BufferedOutputStream(new FileOutputStream(“D:/a.txt”))
实现类3 ObjectInputStream(反序列化)
读取对象 ObjectOutputStream(序列化)
写入对象
使用 把对象写到文件中,从文件中把对象读取到程序 序列化(把对象转换成为字节序列)和反序列化(把对象从字节序列编程对象);当对象在网络中或者文本中传输的时候需要序列化

3、IO流—字符流
1.在读取和写入的过程使用字符(只能操作纯文本),不容易出现乱码
2.输入与输出
输入流 输出流
抽象父类 Reader Writer
实现类1 FileReader FileWriter
使用 char cbuf[] = new char[1024];
int len;
while((len =is.read(buf))!=-1){ write(cbuf,0,len)
}
实现类2 BufferedReader BufferdWriter
使用 String line; //读取的这一行的文件,当到文件末尾的时候他返回null
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
创建:
new BufferedReader(new FileReader(“D:/a.txt”));
new BufferedWriter(new FileWriter(“D:/a.txt”));
实现类3(转换流) InputStreamReader OutputStreamWriter
使用 转换流 : 字节流转换成为字符流-----特殊性
把字节流当参数,把字符流当返回值

二十五、线程

1、进程与线程
进程:运行中的程序就叫做进程
线程:线程是进程的最小执行单元,1个运行的程序会有很多个执行单元
2、线程特点
1.线程是共享进程资源
2.线程是独立性:多个线程之间相互不干扰
3.并发性:多个线程可以同时执行(cpu给时执行,时间肉眼分辨不出,我们看到的效果就是同时进行)
3、线程的生命周期(重点)
新生(创建 ):new线程
等待(就绪):调用start方法,进入排队
运行:线程运行
阻塞:线程提供了一些阻塞的方法
死亡:线程结束

4、多线程----定义线程
1.继承Thread类—重写run方法—创建Thread对象—调用start方法(开启线程)
run方法是线程体,线程体中具体写什么是根据线程需要完成什么功能定的
可重写构造方法给线程传入一个字符串即线程的名字,通过调用getName()获取线程名

2.实现Runable接口—重写run方法—创建Thread对象,把runnable对象当参数—启动start
3.(了解)实现Callable接口—重写call方法—创建Callable接口对象—创建FutureTask对象,把包装后的Callable接口对象当参数—创建Thread包装Task对象—启动线程 可以选择返回值
4.定时器(了解)
Timer timer = new Timer(); //创建1个定时器
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(“定时执行”);

		}}, 2000,1000); //2秒之后执行,间隔1秒执行1次

5、线程的阻塞的几种方法
1.Thread类的方法:
sleep:----睡眠指定时间之后苏醒,进入就绪状态
join:-----强势让其他线程进入阻塞,直到调用join的线程进入死亡,其 他线程才运行
yeild:----直接把运行中的线程进入就绪状态(没有什么实际效果)
2.Object类的方法:
wait:----wait是Object的,表示线程等待,他必须使用notitfy,notifyall 方法唤醒
6、线程的同步(线程安全)
解决方法:synchornized
让线程在执行某一个操作的时候,会等执行完毕之后,cpu才给其他线程执行,这个会让方法操作过程中安全,同时也会降低效率(12306多个窗口卖票)
1.同步代码块
synchornized(对象){
//锁,锁住这一段代码,其他线程不能够来这段代码之间干扰
}
2.同步方法
public synchornized void a(){} —锁着这一个方法,在这个方法
运行过程中,不允许其他的线程进行干扰,直到这个方法运行完成
7、线程的通信【L9010310】
1.死锁:两个线程相互拿着(synchornized锁住)对方需要的资源而不放手
在线程的通信中要避免这种情况
2.主要使用wait和notify2个方法,详情见代码
8、线程池【L9010310】
1.线程池:装了很多个线程的池子,
2.作用:
如果不使用池子,那么就是创建1个线程,然后用完销毁,如果使用线程的频率较高,就会消耗过多资源
所以,就出现了线程池,直接使用线程池的线程不需要自己去启动线程,只需要把需要执行的操作告诉线程池就可以,线程池会自动调用有空闲的线程来执行操作,用完又放回线程池里
3.线程池的优势:
1.线程池有利于管理
2.重用存在的线程,减少对象的创建,性能好
3.可以有效的控制最大的并发量,提高资源的使用率,避免过多的资源竞争导致的阻塞等情况
4.提供定时执行,定期执行,单线程,并发数量控制
4.线程池的用法
Executors.----来获取线程池
executor或submit方法来执行线程
Shutdown----关闭线程池
1.可缓存线程池:无限大
newCachedThreadPool
2.定长的线程池(使用最多)
newFixedThreadPool
3.定长,并且支持周期性任务–和定时器类似
newScheduledThreadPool
执行线程方法—schedule(target【Runnable对象】, 3【分】, TimeUnit.SECONDS【其他时间】)
4.单线程化线程池(只有1个线程来执行任务,他所有的任务必须先进先出)
newSingleThreadExecutor

JAVA oop 1.基本数据类型及其大小
整数
byte 1字节/8位/8bit -128 ~ 127
short 2字节/16位/16bit -32768~32767
int 4字节/32位 -21亿~21亿
long 8字节/64位 -922亿亿~922亿亿
浮点数
float 4字节/32位 ± 3.4E38 最多只保留8位有效数字
double 8字节/64位 ±1.7E308 最多只保留16位有效数字
非数字
char 2字节/16位 0~65535
boolean 16位 true false
科学计数法
123456789=1.23456789*10的8次方
=1.23456789E8
=1.2345678E8
123456780
所有的字符都采用一个整数来表示,
这个整数叫做这个字符的Unicode编码
char a=‘中’;
char a =20013;


限制访问符
public 公共的 所有类中都可访问
protected 受保护的 同一个包内或者子类中可访问
默认缺省 同一个中可访问
private 私有的 同类中可访问


final 最终的
可以用来修饰类 变量 方法
final修饰类 表示该类不可以被继承
final修饰变量 表示该变变量只能赋值一次,且使用时必须初始化
final修饰方法 表示该方法不可以被重写


1.关键字不一样 抽象类abstract class 接口是interface
2.抽象类中的属性可以是成员属性,也可以是类属性
接口中的属性必须是公共的常量
3.抽象类中的方法可以是具体的方法,也可以是抽象方法
接口中的方法只能是抽象方法,或者是default方法[1.8及以上]
4.抽象类有构造方法,接口没有构造方法
5.一个类只能继承一个抽象类
一个类可以实现多个接口

面向对象编程
面向过程与面向对象
类与对象的关系
属性,方法和构造方法
方法的重载
封装
**应用程序?**现实的虚拟
写程序?使用计算机语言去描述现实中的事物
面向过程?
描述一个事物的时候关注的是事情发展的步骤,流程
斗地主:洗牌 发牌 抢地主 出牌 结算
xipai() fapai() qiangdizhu() chupai() jiesuan()
main(){
xipai();
fapai();
qiangdizhu();
chupai();
jiesuan();
}
面向对象?
描述一个事物的时候关注的是事情中相关的人物
斗地主:
荷官 洗牌 发牌 结算
xipai() fapai() jiesuan()
玩家 抢地主 出牌
qiangdizhu() chupai()

main(){
荷官.xipai();
荷官.fapai();
玩家.qiangdizhu();
玩家.chupai();
荷官.jiesuan();
}


对象:做事情的人或者物,是一个具体的个体
类: 表示的是对象共同特征的描述,是一个抽象的概念
类型 对象
学生 朱坤
电脑 某一台电脑
桌子 某一张桌子
类是对象的抽象
对象是类的具体表现


学生类
定义类
创建对象
调用属性和发
构造方法
每个类都默认隐式声明了一个无参数的构造方法
构造方法的特点
a.构造方法的名字必须和类名一致
b.构造方法不需要声明返回值类型
c.构造方法不能被重写[覆盖]
d.构造方法要通过new关键字调用
构造方法的重载
在一个类中可以定义多个构造方法,只要参数列表[类型,个数,顺序]不一样
方法的重载
在同一个类中定义多个同名不同参数列表的方法
方法的重载和返回值没有关系


封装:

一、java基本格式
public class Demo1{
//公共的类的类名必须和文件名一致
public static void main(String[] args){
//java的输出语句,先输出后换行
System.out.println(“Hello world”);
//java的输出语句,输出之后不换行
System.out.print(“Hello world”);
System.out.print(“Hello world”);
}
}
二、java标识符
java严格区分大小写:
1、标识符:取名字 规则
1.严格区分大小写
2.关键字(所有颜色不是黑色的都是关键字)不能是标识符
3.所有标识符都是由字母,数字,_,美元符号$组成
4.数字不能够开头
2、标识符:规范
1.见名知意
2.驼峰命名
1.包名:全部小写
2.类名每个单词的首字母大写 GetName
3.变量名和方法名,首个单词小写,之后每个单词首字母大写 getName
4.常量:所有单词全部大写单词和单词之间用下换线连接 GET_NAME

三、数据类型
数据类型 变量名 = 值
数据类型:2大类
1、基本数据类型 8个
1.整型
byte 1个字节 8bit 2^8=256 -128—127
short 2个字节 16bit 2^16=65536
int 4个字节 32bit 2^32=
long 8个字节 64bit
long比较特殊,使用long类型的时候需要在数值后面加上L
按照理论来说我们所有的数据类型肯定是选择合适的,内存空间不浪费
但实际来说,他的这个浪费的空间可以忽略不计,所以一般整数都使用int
2.浮点型
float 使用float类型的时候需要在数值后面加上F f
double
3.字符
char
4.布尔类型
Boolean
2、引用数据类型
3、基本数据类型的类型转换

  1. 自动类型转换:小的类型会在和大类型做运算的时候进行自动类型转换
    基本数据类型从小到大:
    byte short int long float double char
    2.强制类型转换:大类型数据转成小类型数据
    语法 小类型的变量 = (小数据类型)大类型数据

四、运算符
1、算术运算符:+ - * / % ++ –
注意:
+:当他的左右2边都是数字的时候做相加操作,
当左右2边有字符串的时候做连接符号(拼接)
/:因为自动类型转换 在java中整数除以整数结果是整数
%:a%b a为正数,不管b是正是负,结果都为正
a为负数,不管b是正是负,结果都为负
++:在单目运算中,++在前和++在后没有区别,都是自增1
在双目运算中,++在前,会先自增1,然后再运算,
++在后,会先运算,然后再自增1
2、赋值运算符:+= -= *= /= =
3、比较运算符:> >= < <= != == 比较对象:instanceof
4、逻辑运算符:左右2边必须都是boolean值
&&:短路与:先判断左边,若左边为ture,再判断右边,若左边为false则 不再判断右边,直接返回false
||:短路或:只要有1个为真,结果为真,跟短路与是一个道理
!:非:!true=false
^:或异:一真一假为真,同真同假为假
&:逻辑与
|:逻辑或
5、位运算符:左右2边必须都是数字
进制 进制的转换
& | ! ^
先转换成为2进制,然后再进行计算
&: 1表示true 0表示fasle 有1个0结果就是0 2者都是真,结果为真,
有1个假,结果就是假
|:有1个1结果就是1
!:1结果是0,0的结果是1
^:1个0,1个1结果是1,2个1或者2个0 结果是0
6、三目运算符
A?B:C

五、流程控制
顺序结构:从上到下,从左到右
1、分支结构:
switch:等值判断
switch(变量){
case 值:
代码
break;

default:
代码
}
if:等值判断,范围判断 只能是boolean值
if—else
if—else if —else
2、循环结构
1.while
2.do-while 先执行,后循环,至少会执行一次
3.for
break:结束循环和分支
continue:结束本次循环进入下一次循环

六、函数
1、语法
[public static] void(返回值)/数据类型 函数名(参数列表){
如果是void,则表示没有返回值,如果函数有返回值则需要加上数据类型
return 值;//值和返回值的数据类型一致
}
2、看一个函数 是否有返回值
1.明确说明要返回值
2.但是这个返回执行完之后,需要他的结果在其他方法中操作
3.上述2者都是没有的,那就先当做没有返回值处理,然后再看方法是否符合要求
3、4种情况
1.没有参数没有返回值
public static void 函数名(){
}
在main方法中调用
函数名();
2.没有参数有返回值 (假如返回值时int类型的)
public static int 函数名(){
return 10;
}
在main方法中调用
int rest = 函数名();
-------------假如返回值时String类型的------------------
public static String 函数名(){
return “—”;
}
在main方法中调用
String rest = 函数名();
3.有参数没有返回值
public static void 函数名(参数){
}
在main方法中调用
函数名(值);
4.有参数有返回值
-------------假如返回值是int类型的------------------
public static int 函数名(参数){
return 10;
}
在main方法中调用
int rest = 函数名(值);
-------------假如返回值是String类型的------------------
public static String 函数名(参数){
return “—”;
}
在main方法中调用
String rest = 函数名(值);
函数和函数之间可以相互调用
4、重载
同一个类中,同一个函数名
参数的个数不同,参数的顺序不同,参数的类型不同
就会形成重载(重载和返回值没有关系)
4、递归
自己调用自己
解决复杂的代码的,方便阅读,但是执行效率很低,可以不用尽量不用

七、数组
1、特点
1.数组一旦声明其大小不可改变
2.数组是引用数据类型,但是数组可以被定义存储任意数据类型数据
3.数组的类型必须是一致的
4.数组有默认值,默认值就是定义的类型的默认值
5.数组有顺序,通过下标定义顺序 下标从0—length-1
2、声明和赋值
1.动态初始化
通过下标赋值
举例子: int [] arr ;
//声明一个变量这个变量是数组类型的,他的名字叫arr
arr = new int[3];
//给开辟一个空间这个空间3个大小没有值,把这个空间赋值给变量arr
int [] arr = new int[3];
arr[0] = 12;
2.静态初始化
int [] arr = {1,2,3}
//声明一个变量,类型是数组,名字是arr,开辟1个空间里面3个大小
值为1,2,3 吧这个空间赋值给arr变量
int [] arr = new int[]{1,2,3}
//声明一个变量,类型是数组,名字是arr,开辟1个空间里面3个大小
值为1,2,3 吧这个空间赋值给arr变量
3.默认初始化
每个数组都有默认值
3、操作
1.冒泡排序 是比较相邻的2个数
第一个循环,循环的是比较次数
第二个循环,循环的是下标
public static void sore(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int a = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = a;
}
}
}
System.out.println(Arrays.toString(arr));
}
2.增删改
数组的扩容
1.创建1个新的数组(数组的大小比比旧的数组大)
2.把旧数组中所有数据全部复制到新数组中
3.把新数组的地址复制给旧数组
3.查询
foreach循环遍历数组:
for(遍历出来数据的类型 变量名:需要遍历的数组、集合){
变量名就是集合、数组中的值
}
length—长度用来遍历下标 for循环
4. 其他
Arrays.toString(arr)---------输出数组中的元素
Arrays.CopyOf(arr,len)----------------将数组arr变成len长度

4、二维数组—了解
int [][] arr = new int[一条烟中多少包][一包烟中多少支];
每一包中的根数是相同
变量-------一支烟
一维数组-------一包烟,一包中可以有多支
二维数组------一条烟,一条烟中有多包,1包中又可以有多支
int [][] arr = new int[3][10];
arr.length----这条烟有多少包
arr[0].length----第一包有多少支
//每一包中个数都是再定义,可以设置不一样
1.动态初始化
int [][] arr = new int[10][];—这条烟有10包
arr[0] = new int[12];----第一包10支
arr[1] = new int[2];----第二包2支
2.静态赋值
int[][] arr = {
{1,2,3},
{12,34}
}

八、对象和类
1、定义类的语法
public class 类名{
//1.属性----名词----成员变量
//2.函数,方法-----动词----成员方法
}
2、定义对象的语法
类名 变量名 = new 类名();
访问属性:对象名.属性名 = 值 ; 对象名.属性名
方法方法:对象名.方法名();
3、类和对象在内存中的分析
4、构造方法
每个类中都有1个隐藏的无参数的构造方法
但是当我门写了有参数的构造方法之后,无参数的构造方法就没了,需要手动添加
作用:
1.创建对象 new+构造方法(构造器)----创建对象
2.用来初始化成员变量
语法
public 类名(){}//隐藏的构造方法

九、封装
1、提供了4个权限修饰符
public:公共的 整个项目中所有都可以访问他(项目可见性)
protected:受保护的 当前包以及其子类
default:默认的 当前包(包可见性)
private:私有的 当前类 (类可见性)
2、为什么要封装
1.封装可以方便访问
2.数据安全性
3、权限修饰符
public:公共的 一个文件中可以有多个类,但只允许有一个公共类 项目可见性
构造方法并不只所有的都有public 修饰的,它是根据类来的,类是被public修饰的,那构造方法也是被public修饰的。
Protected:受保护的
default:普通的(默认) 包可见性
private:私有的
1.给私有属性提供setter(设置私有属性的值)和getter(获取私有属
性的值)方法
2.方法名有要求 set+属性名(首字母要大写) get+属性名(首字母
大写)
public protected default private
类,构造方法 √ √
属性 √ √ √ √
方法 √ √ √ √

这三个都可以被4个权限修饰符修饰
重点在属性私有化,提供getters和setters方法
4、this关键字:this指当前对象本身
1.访问方法 :访问当前类中的方法,可以省略this
2.访问属性:当成员变量和局部变量同名的时候,使用this.属性表示成员变量
3.访问构造方法:this(值)—表示调用当前类中的构造方法

十、继承
继承和ts中也是一样的
1、extends关键字----继承父类非私有的属性和方法
扩展类的功能
注意:不能多继承,可以多层次继承
2、super:指父类本身
1.访问方法 ://访问当前父类中的方法,使用super.方法();
2.访问属性:super.属性—访问父类属性
调用父类的属性的时候,可以省略super,继承了属性,可以直接调用
3.访问构造方法:super(值)–调用的是父类的构造方法,只能写在第一行

3、重写:当父类的方法不满足子类的需求的时候就需要重写,重写只改变方法体
重写是覆盖子类继承父类的这个方法,在子类中覆盖,和父类本身方法无关

十一、toString
toString是顶级父类object的方法,在输出对象时会自动调用这个方法,如果不重写这个方法,直接输出对象时,输出的是储存这个对象的地址,所以在一般类中都会重写toString这个方法,重写为输出对象的属性。快捷方式:Source>Generate toString()…

十二、equals
equals是顶级父类object的方法,是用于比较的,在Object中他的比较是用“”进行比较的,基本数据类型使用“”比较的是值,引用数据类型使用“”比较的是地址,
如果我们使用equals进行比较引用数据类型,如果没有重写equals就是使用“
”进行比较的,所以如果要使用equals进行引用数据类型值的比较,我们就要重写equals方法(自定义的类),有些地方会直接说:equals比较的是引用数据类型的值,不是地址,==比较的才是地址。快捷方式:Source>Generate equals()…

十三、abstract
抽象类:用来当做父类给子类继承,并且要求子类必须重写抽象方法
1.使用abstract修饰类
2.不能创建对象–创建对象是是否构造方法来的
3.在抽象类中可以定义普通类中定义的所有(变量,常量,方法,构造方法)
4.抽象方法没有方法体,加上abstract修饰方法

十四、final
final修饰变量的是常量
1、final修饰方法—方法不能被重写
2、final修饰的类----是不能被继承的
3、抽象类是否可以使用final修饰:不可以
因为抽象类被定义出来就是供子类继承的,而final修饰的类不能被继承,两者相悖,所以不可以

十五、static(静态的)
static修饰属性和方法
static修饰的都是属于类的,整个类只有1份,那么根据类创建的对象也都只有这一份,如果没有static修饰,那么每个对象在创建的时候都会有各自的一份
static修饰的是在第一次使用类的时候,进行加载,整个类中只加载1次
第一次使用类,并不等于第一次创建类
Student(第一次使用类) d = new Student()(第一次创建类);

static修饰的是类的,在第一次使用类的时候加载,第一次使用类的时候可能还没有对象,非static修饰的是对象的,有对象的时候肯已经使用了类,加载过static修饰(new Student();)
1.在static的方法中,不能够直接调用非static的方法和属性,因为这个时候可能还没有对象,也就是可能还没有非static的方法和属性
2.可以创建对象调用,也可以不创建对象调用
3.不能有this,this指的是对象,同1
4.非static中,可以调用静态的属性和方法

使用static修饰的方法或属性:
1.创建对象访问
2.类名.方法 类名.属性

十六、多态
1、面向对象有3大特征:封装、继承、多态
2、多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
3、多态:
1.必须有继承或者是实现
2.方法有重写
3.父类的引用指向子类的对象
4、多态使用(重点):

  • 1.多态的情况下,不能够调用子类的独有的方法
  • 2.多态的情况下,调用的是父类的属性和方法,如果子类方法重写了父类的方法,那他调用的就是子类的重写方法
  • 3.多态的情况下,调用的是父类的属性,不调用子类的属性
    5、父子转换
    1.子转父
    引用数据类型的自动类型转换
    Animals an = new Dog();
    2.父转子
    向下转换—为了调用子类独有的
    Dog d = (Dog)an;

十七、联级
1、MVC:(适用于界面是HTML)
M:model—模型 --数据层和实体层—模型
V:view----视图----界面
C:controlle—控制层
2、java控制台模拟使用三层架构

十八、常用类
1、Scanner
扫描器—控制台输入—实际作用并不大 new Scanner(System.in)
nextInt—获取键盘输入的int数据
next-----获取键盘输入的字符串
nextDouble-----获取键盘读入的double数据
nextLine—不推荐大家使用

2、System—系统类–当前Java运行的平台
out in err----输出 输入 错误输出
3、Object----顶级父类
equals-----比较,在object中使用==进行,子类需要比较时候重写
toString----自动调用,输出对象的时候自动调用,object中返回时对象的地址, 子类一般重写,返回属性信息
hashcode----返回的是一个对象的哈希值(集合)
getClass----获取对象的class对象(反射)

4、Math:数学类,提供了一些常用的方法
Math.abs(1);//绝对值
Math.ceil(12.4);//向上取整
Math.floor(12.4);//向下取整
Math.sqrt(9);//开平方
Math.max(12, 1);//最大值
Math.min(1, 23);//最小值
Math.pow(2, 3);//2的3次方
Math.round(12.3);//四舍五入,取整
Math.random();//随机数[0,1)

5、String,StringBuilder,StringBuffer(重中之重)
1.String:是字符串,不可变字符,final修饰,不可以被继承

// str.charAt(index)-----获取指定下标的字符
// str.length()-----------字符串中字符的个数
// str.compareTo(anotherString)-----比较2个字符,返回1大于 0等于 -1 小于
// str.equals(anObject)----比较等于true,不等于false
// str.concat(str4)-----拼接字符串
// str.contains(s)------判断是否包含字符串
// str.getBytes()-----把字符串转换成为byte数组
// str.indexOf(ch)----返回第一个该字符的下标
// str.lastIndexOf(ch)----返回最后一个该字符的下标
// str.replace(oldChar, newChar)----替换
// str.isEmpty()-----判断是否为空—true表示空
// str.split(regex)------分割
// str.trim()------去掉字符串左右2遍的空格
// str.substring(beginIndex, endIndex)----截取字符串,从开始下标到结束 下标(包头不包尾)
// str.substring(beginIndex)–从该下标截取字符串到末尾
2.StringBuilder,StringBuffer
StringBuilder:可变字符,final修饰,不可以被继承,线程不安全(效率高)
append()—追加字符串
StringBuffer:可变字符,final修饰,不可以被继承,线程安全(效率低)
StringBuffer需要进行线程同步操作,其性能要比StringBuilder要差但是适用于多线程并发。
3.使用
1)什么时候使用StirngBuilder什么时候使用StringBuffer:
1个是线程不安全的,1个是线程安全的,在多个线程的情况下我们才会使用Buffer,大部分情况下都是单线程的情况,这个时候使用StringBuilder
2)什么时候使用String,什么时候使用StringBuilder
1个是不可变字符序列,1个是可变字符序列,String他操作之后会生成 新的字符,而不是在,原有的字符上进行改变,所以适用于少量字符的操作,
StringBuilder是可变字符序列,所以大量字符操作使用StringBuilder,而且 StringBuilder的append方法比+=更加方便而且明确

十九、时间
1、Date(方法已过时)
获取当前时间 new Date()
获取时间戳 getTime()
年月日时分秒-----year month+1 date hour minute second
2、Calendar
Calendar.getInstance()-----创建Calendar对象
年月日时分秒-----get(Calendar.YEAR) MONTH+1 DATE HOUR MINUTE SECOND
3、时间格式化
SimpleDateForMate:国际化
格式:yyyy–年 MM—月 dd----日 hour、Hour—小时 mm—分钟 ss—秒

  1. 把时间对象转换成为一定格式的字符串—formate
  2. 把一定格式的字符串转换成为时间对象—parse
    案例:
    //2010-2-12 12:23:34 把字符串依照这个格式进行转换成为时间对象—把时间对象按照这个格式转换成为字符串
    SimpleDateFormat formate = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
    //把字符串依照这个格式进行转换成为时间对象
    try {
    Date parse = formate.parse(“2010-2-12 12:23:34”);//parse这个方法把字符串和规则一样转换成为时间
    System.out.println(parse.toLocaleString());
    }catch(Exception e) {
    e.printStackTrace();
    System.out.println(“格式不正确”);
    }
    //把时间对象按照这个格式转换成为字符串
    Date date = new Date();
    String format = formate.format(date);//format这个方法把时间按照规则转换
    System.out.println(format);

二十、堆栈内存分析
cpu在运行过程中,代码所占内存
堆:存放new出来的(不管代码写在哪里,只要是用过new)。开辟的空间
1.垃圾回收机制----不定时回收----开辟空间少,耗费内存就少
栈:写在方法中的变量(局部变量) 数据类型 变量名; (int num , Person p)
先进的后出,而且属于一个方法结束,他的先进的后出
栈中内存存在cpu中的时间对于堆中来说,时间相对较短
方法区:加载一个类的时候,加载的代码。我们在使用1个类的时候
他需要先进行加载1个类,这些,代码都会加载进我们的方法区
常量池:存放static修饰的变量,或者是常量,以及字符串常量
“1” “abc” “你好”

二十一、包装类
所有的基本数据类型都有对应的包装类
基本数据类型首字母大写变成包装类
byte------------Byte
short-----------Short
int-------------Integer----特殊
long------------Long
double----------Double
float-----------Float
boolean---------Boolean
char------------Character—特殊
注意事项:
1.基本数据类型,各自有各自的默认值,但是包装类的默认值都是null
2.所有的基本数据类型会自动包装成包装类,包装类会自动拆箱成基本数据类型
自动装箱----基本数据类型自动转换成为包装类
自动拆箱----包装类自动转换成为基本数据类型
3.基本数据类型上没有方法,所以包装类是提供一些关于基本数据类型的方法
包装类就是解决基本数据类型没有方法这个缺点
常用的方法:
int num = Integer.parseInt("")----把字符串转换成为数字int类型
double num = Double.parseDouble("")----把字符串转换成为数字double类型

二十二、异常
Throwable----是error和exception的父类基类
error :是系统异常 ,error 是系统异常 ,通常很难解决。通常很难解决
exception:exception是语法的问题或者逻辑的问题,可以通过改变代码的方式来解决
堆栈溢出错误
1、编译时异常(受检时异常)
常见的受检时异常:IOException FileNotFoundException 等
2、运行时异常:run运行才出现的
常见的运行时异常:下标越界 NullPoint ClassCastException
异常解决;
1、try–catch–finally
1.通过Try包裹可能会出现的异常代码,通过catch进行异常的捕捉,捕捉了对应的异常之后,执行catch中的处理方式—(具体的处理方法随需求定)
catch去捕捉异常的时候顺序一定是先子类—父类
写法可以是一个catch捕捉多个异常
在异常处理中finally里面代码不管return或者异常等问题时候都会被执行
finally可写可不写
2、throws
throws—声明这个方法有1个异常,最后给jvm处理 + 异常类型
在项目中一般是view层处理异常
throw—抛出异常 ,在方法中抛出异常
throw new Exception(); throw +异常对象
3、throw 自定义异常
提供了多个构造方法,通过super调用父类的构造方法,例:
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException(){
super();
}
public AgeOutOfBoundsException(String massage) {
super(massage);
}
// ArrayIndexOutOfBoundsException
public AgeOutOfBoundsException(int age) {
super(“年龄超出合理范围:”+age);
}
}

二十三、集合体系
变量:存储1个
数组:存储多个,[数组一旦创建大小是固定][数组中的数据类型必须相同]
集合体系:可以存储任意个数据,可以存储任意类型的数据

1、集合接口
Collection----------所有集合的父接口
List Set------2个子接口
list:存储的数据是有序的(下标),可以重复
set:存储的数据是无序的,不可以重复
Map----接口----他是key-value的格式,通过key找value

Iterator----迭代器接口----用来遍历集合
2、泛型

  1. 问题1:
    往集合中存储任何东西的时候,取出来进行操作时候不方便—如果存储的是同一样比如下面全部是学生,拿出来就是Object不是Student还要强转
    解决方法:
    泛型
    1.在集合中怎么使用泛型
    集合的特点:
    存储数据没有数量限制
    存储数据没有类型限制-----泛型进行类型限制
    new ArrayList<类型>()----表示创建的这个集合对象是有类型限制 的,整个集合中只能够存储这种类型的数据
    2.泛型的好处:
    数据安全
    数据不需要强转,类型不是Object类型
    一般情况下来说,如果存放的数据都是同一个类型,那么都需要使用泛型 99%都 是要是用泛型,泛型必须是引用数据类型
  2. 问题2:
    我有1个方法,这个方法是可以输入任意类型的
    解决方法1:
    public class Generics { //在创建对象的时候有1个类型E,在类中可以使用E这个类型
    /**
    • E:表示泛指的传入参数类型,传入的是E这个类型,返回值就是E这个类型
    • E在编译的时候是泛指1个类型,但是他具体根据谁来定类型
    • 在创建类的时候确定类
    • 添加的参数的类型和返回值的类型就必须和创建对象的类型一致
    • @param args
      /
      public E method3(E e) {
      return e;
      }
      }
      解决方法2:
      /
      *
    • 我们返回值的类型是由参数类型确定的,
    • 但是参数类型现在是不固定的
    • @param T—使用T泛指1个类型
    • 传入的类型是T,返回值类型就是T
    • T不能一直是泛指的,他在运行的时候是需要确定的。所以
    • 这个—这个T在调用方法的时候告诉你确定的类型
      */
      public T method2(T t) { //参数数据类型定义为T–这个T表示不固定
      return t;
      }

3、Collection具有的方法
add—添加1个元素
addAll—添加1个集合
clear----清空集合
contains—是否包含元素
containsall—是否包含集合中所有元素
equals—比较集合中对象
isEmpty—集合是否为空(没有元素)
iterator() ----遍历集合
remove----删除元素
removeAll----删除集合
size-----集合中元素的个数
toArray—把集合转换成为数组
4、List
具有collection中的所有方法
1.ArrayList:他的底层是数组实现的,增删慢,查找快,线程不安全,效率高(使用最多)
2.LinkedList:他的底层是双向链表实现的,增删快,查找慢
在ArrayList的基础上新增加了些方法 addFirst getFirst addLast getLast
在有特殊要求–和第一个数据以及最后一个数据相关的需求的时候使用
3.Vector:他的底层也是数组实现的,增删慢,查找快,他是线程安全,效率低
Vector他是属于线程安全的,只有在多线程情况下才会使用Vector
4.Stack:栈,先进的后出
push()—在最后添加
pop()—弹出最后一个,并删除
peek()—弹出最后一个,不删除
5.Queue:队列,先进的先出
offer()—在队伍的后面进行增加
poll()—弹出第一个,并删除
peek()—弹出第一个,不删除
6.遍历
for foreach iterator
5、Set:去除重复项,排序
1.TreeSet(必须实现compareble)
TreeSet他可以去除重复,底层是树实现
TreeSet去除重复,根据二叉树的原理
二叉树原理:右子树>左子树(节点和节点之间有大小之分)不会相等
在存入数据的时候,进行数据的大小比较(实现compareble 接口,实现compareTo)
2.HashSet(一般已经有的类都是重写了equals方法)
HashSet可以去除重复,底层是哈希表实现
HashSet去除重复的原理,根据哈希表的原理
哈希表原理:哈希值,equals(hashCode和equals重写还是不重写根据需求定)
如果hashSet存储数据,就根据需求去进行判断是否重复
hashCode方法就是用来获取哈希值的,每一个对象的哈希值不一样
hashSet是使用equals方法和hashCode
先比较hashCode值是否相等,如果hashCode值不相等那么就不 重复,HashCode不相等再比较equals方法,equals方法返回true表 示相等,false表示不相等
6、Map
K-V的存储,通过key找到value
创建:
// 泛型就是限制数据类型,map有key值的要求,也有value值类型的限制
HashMap<String, String> hashMap = new HashMap<>();
语法:
1.添加 put
2.查找 get keyset entrySet values
概念:
HashMap和HashTable都是底层散列表(哈希表)
HashMap的key值不能够重复,key和value都可以有null值
Hashtable的key不能够重复,key和value不能够用有null值,会报空指针异常,Hashtable是线程安全的,效率低

二十四、IO流
1、File—文件类
1.File:描述1个路径,这个路径可以是文件也可以是文件夹,而且这个路径可以是真实存在的,也可以是不真实存在。new File(“D:/a/b.txt”) new File(“D:/a”,”b.txt”)
2.方法
createNewFile---------------创建文件
mkdir------------创建文件夹(父路径必须存在)
mkdirs---------------创建文件夹(父路径可以不存在)
file.isFile----------------是否是文件
file.isDerectory-----------------是否是文件
delete---------------------------删除文件也可以是文件夹
file.exists-----------------------file描述的路径是否真实存在
getName---------------获取文件的名字 endsWith----------获取文件后缀
getParent----------------------获取父路径
canRead-----------------------可读
canWrite-----------------------可写
renameTo------------------------给文件改名
List------------------将该文件下所有文件名变成一个字符串集合
listFiles----------将该文件下所有文件对象变成一个File对象集合
2、IO流—字节流
1.在读取和写入过程中使用字节(可以操作图片,视频,音频等等),操作文字有可能出现乱码
2.输入与输出
输入流 输出流
抽象父类 InputStream(控制台输入可获得字节流) OutputStream
实现类1 FileInputStream FileOutputStream
使用 byte [] buf = new byte[1024];
Int len =is.read(buf);
write(buf,0,len); len:读取的字节个数放到数组,数组中字节的个数。-1表示文件结束

实现类2 BufferedInputStream BufferedOutputStream
使用 Buffered:缓存的意思,类中自带了1个数组进行缓存,他的读取和写入的速度会增快
创建:
new BufferedInputStream(new FileInputStream(“D:/a.txt”))
new BufferedOutputStream(new FileOutputStream(“D:/a.txt”))
实现类3 ObjectInputStream(反序列化)
读取对象 ObjectOutputStream(序列化)
写入对象
使用 把对象写到文件中,从文件中把对象读取到程序 序列化(把对象转换成为字节序列)和反序列化(把对象从字节序列编程对象);当对象在网络中或者文本中传输的时候需要序列化

3、IO流—字符流
1.在读取和写入的过程使用字符(只能操作纯文本),不容易出现乱码
2.输入与输出
输入流 输出流
抽象父类 Reader Writer
实现类1 FileReader FileWriter
使用 char cbuf[] = new char[1024];
int len;
while((len =is.read(buf))!=-1){ write(cbuf,0,len)
}
实现类2 BufferedReader BufferdWriter
使用 String line; //读取的这一行的文件,当到文件末尾的时候他返回null
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
创建:
new BufferedReader(new FileReader(“D:/a.txt”));
new BufferedWriter(new FileWriter(“D:/a.txt”));
实现类3(转换流) InputStreamReader OutputStreamWriter
使用 转换流 : 字节流转换成为字符流-----特殊性
把字节流当参数,把字符流当返回值

二十五、线程
1、进程与线程
进程:运行中的程序就叫做进程
线程:线程是进程的最小执行单元,1个运行的程序会有很多个执行单元
2、线程特点
1.线程是共享进程资源
2.线程是独立性:多个线程之间相互不干扰
3.并发性:多个线程可以同时执行(cpu给时执行,时间肉眼分辨不出,我们看到的效果就是同时进行)
3、线程的生命周期(重点)
新生(创建 ):new线程
等待(就绪):调用start方法,进入排队
运行:线程运行
阻塞:线程提供了一些阻塞的方法
死亡:线程结束

4、多线程----定义线程
1.继承Thread类—重写run方法—创建Thread对象—调用start方法(开启线程)
run方法是线程体,线程体中具体写什么是根据线程需要完成什么功能定的
可重写构造方法给线程传入一个字符串即线程的名字,通过调用getName()获取线程名

2.实现Runable接口—重写run方法—创建Thread对象,把runnable对象当参数—启动start
3.(了解)实现Callable接口—重写call方法—创建Callable接口对象—创建FutureTask对象,把包装后的Callable接口对象当参数—创建Thread包装Task对象—启动线程 可以选择返回值
4.定时器(了解)
Timer timer = new Timer(); //创建1个定时器
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(“定时执行”);

		}}, 2000,1000); //2秒之后执行,间隔1秒执行1次

5、线程的阻塞的几种方法
1.Thread类的方法:
sleep:----睡眠指定时间之后苏醒,进入就绪状态
join:-----强势让其他线程进入阻塞,直到调用join的线程进入死亡,其 他线程才运行
yeild:----直接把运行中的线程进入就绪状态(没有什么实际效果)
2.Object类的方法:
wait:----wait是Object的,表示线程等待,他必须使用notitfy,notifyall 方法唤醒
6、线程的同步(线程安全)
解决方法:synchornized
让线程在执行某一个操作的时候,会等执行完毕之后,cpu才给其他线程执行,这个会让方法操作过程中安全,同时也会降低效率(12306多个窗口卖票)
1.同步代码块
synchornized(对象){
//锁,锁住这一段代码,其他线程不能够来这段代码之间干扰
}
2.同步方法
public synchornized void a(){} —锁着这一个方法,在这个方法
运行过程中,不允许其他的线程进行干扰,直到这个方法运行完成
7、线程的通信【L9010310】
1.死锁:两个线程相互拿着(synchornized锁住)对方需要的资源而不放手
在线程的通信中要避免这种情况
2.主要使用wait和notify2个方法,详情见代码
8、线程池【L9010310】
1.线程池:装了很多个线程的池子,
2.作用:
如果不使用池子,那么就是创建1个线程,然后用完销毁,如果使用线程的频率较高,就会消耗过多资源
所以,就出现了线程池,直接使用线程池的线程不需要自己去启动线程,只需要把需要执行的操作告诉线程池就可以,线程池会自动调用有空闲的线程来执行操作,用完又放回线程池里
3.线程池的优势:
1.线程池有利于管理
2.重用存在的线程,减少对象的创建,性能好
3.可以有效的控制最大的并发量,提高资源的使用率,避免过多的资源竞争导致的阻塞等情况
4.提供定时执行,定期执行,单线程,并发数量控制
4.线程池的用法
Executors.----来获取线程池
executor或submit方法来执行线程
Shutdown----关闭线程池
1.可缓存线程池:无限大
newCachedThreadPool
2.定长的线程池(使用最多)
newFixedThreadPool
3.定长,并且支持周期性任务–和定时器类似
newScheduledThreadPool
执行线程方法—schedule(target【Runnable对象】, 3【分】, TimeUnit.SECONDS【其他时间】)
4.单线程化线程池(只有1个线程来执行任务,他所有的任务必须先进先出)
newSingleThreadExecutor

JAVA oop 1.基本数据类型及其大小
整数
byte 1字节/8位/8bit -128 ~ 127
short 2字节/16位/16bit -32768~32767
int 4字节/32位 -21亿~21亿
long 8字节/64位 -922亿亿~922亿亿
浮点数
float 4字节/32位 ± 3.4E38 最多只保留8位有效数字
double 8字节/64位 ±1.7E308 最多只保留16位有效数字
非数字
char 2字节/16位 0~65535
boolean 16位 true false
科学计数法
123456789=1.23456789*10的8次方
=1.23456789E8
=1.2345678E8
123456780
所有的字符都采用一个整数来表示,
这个整数叫做这个字符的Unicode编码
char a=‘中’;
char a =20013;


限制访问符
public 公共的 所有类中都可访问
protected 受保护的 同一个包内或者子类中可访问
默认缺省 同一个中可访问
private 私有的 同类中可访问


final 最终的
可以用来修饰类 变量 方法
final修饰类 表示该类不可以被继承
final修饰变量 表示该变变量只能赋值一次,且使用时必须初始化
final修饰方法 表示该方法不可以被重写


1.关键字不一样 抽象类abstract class 接口是interface
2.抽象类中的属性可以是成员属性,也可以是类属性
接口中的属性必须是公共的常量
3.抽象类中的方法可以是具体的方法,也可以是抽象方法
接口中的方法只能是抽象方法,或者是default方法[1.8及以上]
4.抽象类有构造方法,接口没有构造方法
5.一个类只能继承一个抽象类
一个类可以实现多个接口

面向对象编程
面向过程与面向对象
类与对象的关系
属性,方法和构造方法
方法的重载
封装
**应用程序?**现实的虚拟
写程序?使用计算机语言去描述现实中的事物
面向过程?
描述一个事物的时候关注的是事情发展的步骤,流程
斗地主:洗牌 发牌 抢地主 出牌 结算
xipai() fapai() qiangdizhu() chupai() jiesuan()
main(){
xipai();
fapai();
qiangdizhu();
chupai();
jiesuan();
}
面向对象?
描述一个事物的时候关注的是事情中相关的人物
斗地主:
荷官 洗牌 发牌 结算
xipai() fapai() jiesuan()
玩家 抢地主 出牌
qiangdizhu() chupai()

main(){
荷官.xipai();
荷官.fapai();
玩家.qiangdizhu();
玩家.chupai();
荷官.jiesuan();
}


对象:做事情的人或者物,是一个具体的个体
类: 表示的是对象共同特征的描述,是一个抽象的概念
类型 对象
学生 朱坤
电脑 某一台电脑
桌子 某一张桌子
类是对象的抽象
对象是类的具体表现


学生类
定义类
创建对象
调用属性和发
构造方法
每个类都默认隐式声明了一个无参数的构造方法
构造方法的特点
a.构造方法的名字必须和类名一致
b.构造方法不需要声明返回值类型
c.构造方法不能被重写[覆盖]
d.构造方法要通过new关键字调用
构造方法的重载
在一个类中可以定义多个构造方法,只要参数列表[类型,个数,顺序]不一样
方法的重载
在同一个类中定义多个同名不同参数列表的方法
方法的重载和返回值没有关系


封装:

  • 使用访问限定符来限定类,属性,方法和构造方法的可访问范围
    为什么需要封装??
    对于属性的访问,可以有写访问和读访问
    通过访问限定符限定属性的可访问访问
    再通过setter和getter方法来对外提供访问接口
    提高数据的安全性
    封装的级别
    public 公共的 程序中随处可访问
    protected 受保护的 包内和子类中可访问
    缺省的 包内可访问
    private 本类中可访问
    ======================================================
    Java中的数据类型
    基本类型
    整型:byte short int long
    浮点型:float double
    非数字:char boolean
    引用类型
    数组
    类 [抽象类]
    接口 [枚举类型 注解类型]
    类和抽象类,接口
    1.关键字不一样 抽象类abstract class 接口是interface
    2.抽象类中的属性可以是成员属性,也可以是类属性
    接口中的属性必须是公共的常量
    3.抽象类中的方法可以是具体的方法,也可以是抽象方法
    接口中的方法只能是抽象方法,或者是default方法[1.8及以上]
    4.抽象类有构造方法,接口没有构造方法
    5.一个类只能继承一个抽象类
    一个类可以实现多个接口
    =========================================================
    为什么需要接口??
    类中的方法全部是具体的方法
    抽象类中的方法可以是具体的方法,也可以是抽象方法
    接口中的方法全部是抽象方法

Eclipse中的工程结构:

  • 工作空间[WorkSpace]
    工程[Project]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    bin
    软件包[package]
    类/接口[class/interface]的字节码
    Idea中的工程结构
    工程[Project],创建工程的时候指定路径
    模块[Module]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    模块[Module]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    out
    production
    模块
    软件包[package]
    类/接口[class/interface]的字节码
    模块
    软件包[package]
    类/接口[class/interface]的字节码
    =========================================================
    如何继承?
    public class A{}
    public class B extends A{}
    为什么需要继承?
    a.子类可以继承到父类中的属性和方法,减少代码的冗余
    b.子类可以定义自己特有的属性和方法,实现对父类的扩展
    子类特有的方法必须是子类类型的对象才能调用
    c.子类还可以修改【覆盖、重写】从父类继承来的属性和方法
    对象调用的是不是重写的方法,取决于new的类型

static 静态的

  • 可以用来声明类,属性,方法和代码块
    static属性:类属性 该类所有的对象共享的一个变量
    非静态属性:成员属性 该类的每一个对象都独立的有一个变量
    static方法:类方法
    非static方法:成员方法
    调用成员方法的时候,根对象本身的类型[new的类型]有关系
    在调用类方法的时候,只跟变量的类型有关系
    static属性和static方法可以通过对象来调用
    但通常情况下都直接通过类名调用
    在静态方法中不能够直接调用非静态的属性和方法
    static类:一般用来定义内部类[嵌套类]
    static代码块
    static{
    }
    ===========================================================================
    程序的执行顺序
    1.加载类,将class文件加载到JVM的内存中[开辟类的内存空间]
    加载的时候,所有的static的属性和代码块都会按顺序执行
    2.开始执行主函数
    所有的方法[static方法和成员方法]必须要调用才会执行
    3.创建某个类的对象[开辟对象的内存]
    开辟对象的内存空间的时候,所有的成员属性和非静态代码块会按顺序执行。

理解参考运行实例

public class A{
public A(){
System.out.println(“A”);
}}
public class B extends A{
public B(){
System.out.println(“B”);
}}
public class C{
A a = new A();
static B b = new B();

public C(){System.out.println("C");
}public static void change(){B b = new B();
}
public static void main(String[] args){C.change();
}}

执行结果:ABAB

Java中的常用类
String StringBuffer StringBuilder
1.字符串的构造方式
String s = “ABCD”;
String s = new String(“ABCD”);
//字符数组转换成字符串
String s = new String(char[]);
String s = new String(char[],startIndex,count);
//字节数组转换成字符串
String s = new String(byte[]);
String s = new String(byte[],charset);
String s = new String(byte[],startIndex,count,charset);
字符集:
1.所有的字符都是用数字表示的
2.字符用哪个数字表示是有不同的标准的
3.这些标准就称作字符集
4.常见的字符集
ISO-8859-1 ~ ISO-8859-14 只识别半角字符
半角字符:ABC abc 123
全角字符: ABCabc 123
GBK 简体中文 字符集 [支持中文,英文和数字]
GB2312 GB18030
UTF-8 基于Unicode编码的字符集
2.字符串的常用方法
字符串转换成字符数组
toCharArray();
字符串转换成字节数组
getBytes();
getBytes(charset);
查找
charAt(index); 根据下标取出一个字符
indexOf(s); 查找s在字符串中第一次出现的下标位置
lastIndesOf(s); 查找s在字符串中最后一次出现的下标位置
contains(s); 是否包含指定的字符串

匹配
equals(s) 字符串是否以指定的字符串"相等"
equalsIgnoreCase(s)字符串是否以指定的字符串"相等" 忽略大小写
match(s) 字符串是否以指定的字符串匹配

替换
replace(oldString,newString) 替换指定的字符串
replaceAll(oldString,newString)替换指定的字符串
replaceFirst(oldString,newString) 替换指定的字符串,只替换第一次出现的

截取
subString(start)
subString(start,end);

切割
split(“标记”)

字符串长度:包含多少个字符
length()

String StringBuilder StringBuffer
String 基于char数组[jdk8]的实现,一旦定义好,长度就不可改变
基于byte数组[jdk11]的实现
当进行字符串拼接的时候,每次都需要创建新的数组,来存放数据
StringBuilder与StringBuffer 长度可变字符串
StringBuilder的性能要高于StringBuffer
StringBuilder是线程不安全的
StringBuffer是线程安全的

由于StringBuffer需要进行线程的同步操作,其性能要比StringBuilder差
StringBuffer适用于多线程的并发操作。

包装类
每一种基本类型都对应有一个包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Integer
整数对象的创建
Integer t = 100;
Integer t= new Integer(100);
Integer t2 = new Integer(“1234”);

Integer类中的方法大多都是static方法String  s  =  toString(int);String  s  =  toString(int,进制);String  s  =  toBinaryString(int);String  s  =  toOctalString(int);String  s  =  toHexString(int);int  t  =  Integer.parseInt(String);int  t  =  Integer.parseInt(String,进制);

-123的二进制:
先得到123的原码:00000000 00000000 00000000 01111011
取得反码: 11111111 11111111 11111111 10000100
+1 11111111 11111111 11111111 10000101
自动装箱和自动拆箱
自动装箱:基本类型的数据可以自动打包成对应的引用类型
自动拆箱:引用类型的数据可以自动出对应的基本类型


Random
Math
Date
Time
LocalTime
Calendar

浮点数的二进制表示方式:
20.5 = 205*10的-1次方 = 205E-1
1.将整数部分转换成二进制
除以2,取余数
20/2=10…0
10/2=5…0
5/2=2…1
2/2=1…0
1/2=0…1
20的二进制:10100
2.将小数部分转成二进制
乘以2,取整数部分
0.52=1.0 1
0.02=0 0
0.5的二进制:10
3.将整数部分和小数部分整合到一起
20.5的二进制:10100.10
4.将20.5的二进制用科学计数法表示,只保留一个整数位
10100.10 = 1.010010E4
5.将4次方也用二进制表示
4的二进制:100
20.5的二进制采用科学计数法:1.010010E100
6.准备存储
float的存储
float是32位的,第1位是符号位,表示正负
接下来8位是指数位
最后23位表示尾数位
a.存符号位,20.5是一个正数,符号位是0
b.存指数位 float在存储指数位的时候需要先加127,在存储
100+1111111 = 10000011
c.存尾数位 由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分
010010
如果小数部分不够23位,就在后面补0
符号位[1] 指数位[8] 尾数位[23]
0 10000011 01001000000000000000000

float  20.5的二进制:  01000001101001000000000000000000double的存储double是64位的  第1位是符号位,表示正负接下来11位是指数位最后52位表示尾数位a.存符号位,20.5是一个正数,符号位是0b.存指数位,double的指数位需要先+1023,在保存100+1111111111  =  10000000011c.存尾数位    由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分010010如果不够52位,就在后面补0符号位[1]        指数位[11]          尾数位[52]0              10000000011        0100100000000000000000000000000000000000000000000000double的20.5的二进制:0100000000110100100000000000000000000000000000000000000000000000取出float符号位  0取指数位,先减去127,得到真实指数10000011-1111111=100取得尾数部分  01001000000000000000000,在整数部分加11.01001000000000000000000拼接成一个科学计数法表示的数字1.01001000000000000000000E100去除科学计数法10100.1000000000000000000将小数点前面的部分取出,还原成整数  10100  -->    20将小数点后面的部分还原成整数0.10000000  ->0.5000000拼接到一起20.50.3*2=0.6      0
0.6*2=1.2      1
0.2*2=0.4      0
0.4*2=0.8      0
0.8*2=1.6      1
0.6*2=1.2      1
0.2*2=0.4      010100.010011001100110011001100110011001...1.0100010011001100110011001100110011001...E100float    0  10000011    01000100110011001100110
double  0  10000000011  01000100110011001100110123456
1.23456

JAVA文件

  • 什么是文件?
    文件是外存储器中数据的组成方式
    外存储器:硬盘 U盘 光盘 软盘
    文件的分类
    目录文件
    标准文件
    虚拟内存文件
    文件的表示形式:
    字符串路径: D:\aa\b.txt
    文件对象: java.io.File类是用来操作文件的类
    Java中的特殊字符
    ‘’ 字符的边界字符
    “” 字符串的边界字符
    \ 转义字符
    \n 换行符
    \t 制表符
    如果需要将普通字符传转义特殊字符,需要用转义字符
    如果需要将特殊字符转义成普通字符,需要用转义字符
    "
    =============================================
    File类的常用构造方法
    new File(String path) 根据文件路径创建文件对象
    new File(String parent,String child) 根据父路径和子路径创建文件对象
    File类的常用方法:
    exists() 判断文件是否存在
    length() 获得文件的长度,总字节数
    lastModified() 文件的最后一次修改时间,毫秒时间
    delete() 删除文件
    deleteOnExit() 程序结束的时候删除文件
    createNewFile() 创建一个新的标准文件
    mkdir() 创建一个文件夹
    mkdirs() 创建多级文件夹
    isDirectory() 判断文件对象是不是文件夹
    isFile() 判断文件对象是不是标准文件
    list() 如果File对象是一个文件夹,则获得该文件夹下的所有文件的名字
    如果File对象是一个标准文件,则返回null
    listFiles() 如果File对象是一个文件夹,则获得该文件夹下的所有文件对象
    如果File对象是一个标准文件,则返回null
    getAbsolutePath() 获得文件对象的绝对路径
    ========================================
    统计指定的文件夹下有多少个标准文件?有多少文件夹?总大小是多少?
    递归操作:
    在方法中调用自己本身
    递归一定要有退出条件,否则就是死递归,死递归的结果会造成栈内存溢出
    所有的递归操作一定是在一个条件语句中

Java IO
即 Java 输入/输出系统。
Stream 流
Java 中将数据的输入输出抽象为流,流是一组有顺序的,单向的,有起点和终点的数据集合,就像水流。按照流中的最小数据单元又分为字节流和字符流。
流按最小数据单元分为字节流(byte) 和 字符流 (char),
字节流基类:InputStream(输入流)、OutStream(输出流)。
字符流基类:Reader(输入)、Writer(输出)。
Java 的 IO 主要包含两个部分:
1.流式部分:是 IO 的主体部分,也是本文介绍的重点, 流式部分根据流向分为输入流(InputStream/Reader)和输出流(OutputStream/Writer), 根据数据不同的操作单元,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),依据字节流和字符流,Java 定义了用来操作数据的抽象基类InputStream/OutputStream 和 Reader/Writer,再根据不同应用场景(或功能),在这两种抽象基类上基于数据载体或功能派上出很多子类,用来满足文件,网络,管道等不同场景的 IO 需求,从而形成了 Java 的基本 IO 体系。
2.非流式部分:主要包含一些辅助流式部分的类,如SerializablePermission 类、File 类、RandomAccessFile 类和 FileDescriptor 等;

Java IO有很多分类,根据是否直接处理数据,Java io又分为节点流和处理流,节点流是真正直接处理数据的;处理流是装饰加工节点流的。
节点流
节点流是真正直接处理数据的。分为文件流、数组流、字符串流、管道流。

  • 使用访问限定符来限定类,属性,方法和构造方法的可访问范围
    为什么需要封装??
    对于属性的访问,可以有写访问和读访问
    通过访问限定符限定属性的可访问访问
    再通过setter和getter方法来对外提供访问接口
    提高数据的安全性
    封装的级别
    public 公共的 程序中随处可访问
    protected 受保护的 包内和子类中可访问
    缺省的 包内可访问
    private 本类中可访问
    ======================================================

Java中的数据类型

  • 基本类型
    整型:byte short int long
    浮点型:float double
    非数字:char boolean
    引用类型
    数组
    类 [抽象类]
    接口 [枚举类型 注解类型]
    类和抽象类,接口
    1.关键字不一样 抽象类abstract class 接口是interface
    2.抽象类中的属性可以是成员属性,也可以是类属性
    接口中的属性必须是公共的常量
    3.抽象类中的方法可以是具体的方法,也可以是抽象方法
    接口中的方法只能是抽象方法,或者是default方法[1.8及以上]
    4.抽象类有构造方法,接口没有构造方法
    5.一个类只能继承一个抽象类
    一个类可以实现多个接口
    =========================================================
    为什么需要接口??
    类中的方法全部是具体的方法
    抽象类中的方法可以是具体的方法,也可以是抽象方法
    接口中的方法全部是抽象方法

Eclipse中的工程结构:

  • 工作空间[WorkSpace]
    工程[Project]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    bin
    软件包[package]
    类/接口[class/interface]的字节码
    Idea中的工程结构
    工程[Project],创建工程的时候指定路径
    模块[Module]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    模块[Module]
    src
    软件包[package]
    类/接口[class/interface]的源代码
    out
    production
    模块
    软件包[package]
    类/接口[class/interface]的字节码
    模块
    软件包[package]
    类/接口[class/interface]的字节码
    =========================================================
    如何继承?
    public class A{}
    public class B extends A{}
    为什么需要继承?
    a.子类可以继承到父类中的属性和方法,减少代码的冗余
    b.子类可以定义自己特有的属性和方法,实现对父类的扩展
    子类特有的方法必须是子类类型的对象才能调用
    c.子类还可以修改【覆盖、重写】从父类继承来的属性和方法
    对象调用的是不是重写的方法,取决于new的类型

static 静态的

  • 可以用来声明类,属性,方法和代码块
    static属性:类属性 该类所有的对象共享的一个变量
    非静态属性:成员属性 该类的每一个对象都独立的有一个变量
    static方法:类方法
    非static方法:成员方法
    调用成员方法的时候,根对象本身的类型[new的类型]有关系
    在调用类方法的时候,只跟变量的类型有关系
    static属性和static方法可以通过对象来调用
    但通常情况下都直接通过类名调用
    在静态方法中不能够直接调用非静态的属性和方法
    static类:一般用来定义内部类[嵌套类]
    static代码块
    static{
    }
    ===========================================================================
    程序的执行顺序
    1.加载类,将class文件加载到JVM的内存中[开辟类的内存空间]
    加载的时候,所有的static的属性和代码块都会按顺序执行
    2.开始执行主函数
    所有的方法[static方法和成员方法]必须要调用才会执行
    3.创建某个类的对象[开辟对象的内存]
    开辟对象的内存空间的时候,所有的成员属性和非静态代码块会按顺序执行。

理解参考运行实例

public class A{
public A(){
System.out.println(“A”);
}}
public class B extends A{
public B(){
System.out.println(“B”);
}}
public class C{
A a = new A();
static B b = new B();

public C(){System.out.println("C");
}public static void change(){B b = new B();
}
public static void main(String[] args){C.change();
}}

执行结果:ABAB

Java中的常用类
String StringBuffer StringBuilder
1.字符串的构造方式
String s = “ABCD”;
String s = new String(“ABCD”);
//字符数组转换成字符串
String s = new String(char[]);
String s = new String(char[],startIndex,count);
//字节数组转换成字符串
String s = new String(byte[]);
String s = new String(byte[],charset);
String s = new String(byte[],startIndex,count,charset);
字符集:
1.所有的字符都是用数字表示的
2.字符用哪个数字表示是有不同的标准的
3.这些标准就称作字符集
4.常见的字符集
ISO-8859-1 ~ ISO-8859-14 只识别半角字符
半角字符:ABC abc 123
全角字符: ABCabc 123
GBK 简体中文 字符集 [支持中文,英文和数字]
GB2312 GB18030
UTF-8 基于Unicode编码的字符集
2.字符串的常用方法
字符串转换成字符数组
toCharArray();
字符串转换成字节数组
getBytes();
getBytes(charset);
查找
charAt(index); 根据下标取出一个字符
indexOf(s); 查找s在字符串中第一次出现的下标位置
lastIndesOf(s); 查找s在字符串中最后一次出现的下标位置
contains(s); 是否包含指定的字符串

匹配
equals(s) 字符串是否以指定的字符串"相等"
equalsIgnoreCase(s)字符串是否以指定的字符串"相等" 忽略大小写
match(s) 字符串是否以指定的字符串匹配

替换
replace(oldString,newString) 替换指定的字符串
replaceAll(oldString,newString)替换指定的字符串
replaceFirst(oldString,newString) 替换指定的字符串,只替换第一次出现的

截取
subString(start)
subString(start,end);

切割
split(“标记”)

字符串长度:包含多少个字符
length()

String StringBuilder StringBuffer
String 基于char数组[jdk8]的实现,一旦定义好,长度就不可改变
基于byte数组[jdk11]的实现
当进行字符串拼接的时候,每次都需要创建新的数组,来存放数据
StringBuilder与StringBuffer 长度可变字符串
StringBuilder的性能要高于StringBuffer
StringBuilder是线程不安全的
StringBuffer是线程安全的

由于StringBuffer需要进行线程的同步操作,其性能要比StringBuilder差
StringBuffer适用于多线程的并发操作。

包装类
每一种基本类型都对应有一个包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Integer
整数对象的创建
Integer t = 100;
Integer t= new Integer(100);
Integer t2 = new Integer(“1234”);

Integer类中的方法大多都是static方法String  s  =  toString(int);String  s  =  toString(int,进制);String  s  =  toBinaryString(int);String  s  =  toOctalString(int);String  s  =  toHexString(int);int  t  =  Integer.parseInt(String);int  t  =  Integer.parseInt(String,进制);

-123的二进制:
先得到123的原码:00000000 00000000 00000000 01111011
取得反码: 11111111 11111111 11111111 10000100
+1 11111111 11111111 11111111 10000101
自动装箱和自动拆箱
自动装箱:基本类型的数据可以自动打包成对应的引用类型
自动拆箱:引用类型的数据可以自动出对应的基本类型


Random
Math
Date
Time
LocalTime
Calendar

浮点数的二进制表示方式:
20.5 = 205*10的-1次方 = 205E-1
1.将整数部分转换成二进制
除以2,取余数
20/2=10…0
10/2=5…0
5/2=2…1
2/2=1…0
1/2=0…1
20的二进制:10100
2.将小数部分转成二进制
乘以2,取整数部分
0.52=1.0 1
0.02=0 0
0.5的二进制:10
3.将整数部分和小数部分整合到一起
20.5的二进制:10100.10
4.将20.5的二进制用科学计数法表示,只保留一个整数位
10100.10 = 1.010010E4
5.将4次方也用二进制表示
4的二进制:100
20.5的二进制采用科学计数法:1.010010E100
6.准备存储
float的存储
float是32位的,第1位是符号位,表示正负
接下来8位是指数位
最后23位表示尾数位
a.存符号位,20.5是一个正数,符号位是0
b.存指数位 float在存储指数位的时候需要先加127,在存储
100+1111111 = 10000011
c.存尾数位 由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分
010010
如果小数部分不够23位,就在后面补0
符号位[1] 指数位[8] 尾数位[23]
0 10000011 01001000000000000000000

float  20.5的二进制:  01000001101001000000000000000000double的存储double是64位的  第1位是符号位,表示正负接下来11位是指数位最后52位表示尾数位a.存符号位,20.5是一个正数,符号位是0b.存指数位,double的指数位需要先+1023,在保存100+1111111111  =  10000000011c.存尾数位    由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分010010如果不够52位,就在后面补0符号位[1]        指数位[11]          尾数位[52]0              10000000011        0100100000000000000000000000000000000000000000000000double的20.5的二进制:0100000000110100100000000000000000000000000000000000000000000000取出float符号位  0取指数位,先减去127,得到真实指数10000011-1111111=100取得尾数部分  01001000000000000000000,在整数部分加11.01001000000000000000000拼接成一个科学计数法表示的数字1.01001000000000000000000E100去除科学计数法10100.1000000000000000000将小数点前面的部分取出,还原成整数  10100  -->    20将小数点后面的部分还原成整数0.10000000  ->0.5000000拼接到一起20.50.3*2=0.6      0
0.6*2=1.2      1
0.2*2=0.4      0
0.4*2=0.8      0
0.8*2=1.6      1
0.6*2=1.2      1
0.2*2=0.4      010100.010011001100110011001100110011001...1.0100010011001100110011001100110011001...E100float    0  10000011    01000100110011001100110
double  0  10000000011  01000100110011001100110123456
1.23456

JAVA文件

什么是文件?

  • 文件是外存储器中数据的组成方式
    外存储器:硬盘 U盘 光盘 软盘
    文件的分类
    目录文件
    标准文件
    虚拟内存文件
    文件的表示形式:
    字符串路径: D:\aa\b.txt
    文件对象: java.io.File类是用来操作文件的类
    Java中的特殊字符
    ‘’ 字符的边界字符
    “” 字符串的边界字符
    \ 转义字符
    \n 换行符
    \t 制表符
    如果需要将普通字符传转义特殊字符,需要用转义字符
    如果需要将特殊字符转义成普通字符,需要用转义字符
    "
    =============================================
    File类的常用构造方法
    new File(String path) 根据文件路径创建文件对象
    new File(String parent,String child) 根据父路径和子路径创建文件对象
    File类的常用方法:
    exists() 判断文件是否存在
    length() 获得文件的长度,总字节数
    lastModified() 文件的最后一次修改时间,毫秒时间
    delete() 删除文件
    deleteOnExit() 程序结束的时候删除文件
    createNewFile() 创建一个新的标准文件
    mkdir() 创建一个文件夹
    mkdirs() 创建多级文件夹
    isDirectory() 判断文件对象是不是文件夹
    isFile() 判断文件对象是不是标准文件
    list() 如果File对象是一个文件夹,则获得该文件夹下的所有文件的名字
    如果File对象是一个标准文件,则返回null
    listFiles() 如果File对象是一个文件夹,则获得该文件夹下的所有文件对象
    如果File对象是一个标准文件,则返回null
    getAbsolutePath() 获得文件对象的绝对路径
    ========================================
    统计指定的文件夹下有多少个标准文件?有多少文件夹?总大小是多少?
    递归操作:
    在方法中调用自己本身
    递归一定要有退出条件,否则就是死递归,死递归的结果会造成栈内存溢出
    所有的递归操作一定是在一个条件语句中

Java IO
即 Java 输入/输出系统。
Stream 流
Java 中将数据的输入输出抽象为流,流是一组有顺序的,单向的,有起点和终点的数据集合,就像水流。按照流中的最小数据单元又分为字节流和字符流。
流按最小数据单元分为字节流(byte) 和 字符流 (char),
字节流基类:InputStream(输入流)、OutStream(输出流)。
字符流基类:Reader(输入)、Writer(输出)。
Java 的 IO 主要包含两个部分:
1.流式部分:是 IO 的主体部分,也是本文介绍的重点, 流式部分根据流向分为输入流(InputStream/Reader)和输出流(OutputStream/Writer), 根据数据不同的操作单元,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),依据字节流和字符流,Java 定义了用来操作数据的抽象基类InputStream/OutputStream 和 Reader/Writer,再根据不同应用场景(或功能),在这两种抽象基类上基于数据载体或功能派上出很多子类,用来满足文件,网络,管道等不同场景的 IO 需求,从而形成了 Java 的基本 IO 体系。
2.非流式部分:主要包含一些辅助流式部分的类,如SerializablePermission 类、File 类、RandomAccessFile 类和 FileDescriptor 等;

Java IO有很多分类,根据是否直接处理数据,Java io又分为节点流和处理流,节点流是真正直接处理数据的;处理流是装饰加工节点流的。
节点流
节点流是真正直接处理数据的。分为文件流、数组流、字符串流、管道流。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. python爬虫学习笔记总结

    python爬虫 爬虫基础简介 robots协议也称君子协议:规定该网站哪些内容可以爬,哪些不可以爬。 可以通过网站域名 + /robots.txt的形式访问该网站的协议详情,例如:www.taobao.com/robots.txthttp协议/https协议概念:服务器和客户端进行数据交互的一种形式请求头信息:user-…...

    2024/5/6 12:07:05
  2. HZNUOJ2803神枪手JoneySun (Easy Version)(二维数组前缀和)

    神枪手JoneySun (Easy Version) Description Easy Version 和 a little bit hard Version 只有数据范围的区别 JoneySun被邪恶的wifepie困在了一个由11的网格分割的监狱里,邪恶的wifepie为了看JoneySun的笑话,在监狱里的某处监视着JoneySun,幸运的是JoneySun手中有一把枪,不…...

    2024/4/30 17:51:34
  3. 华为 “VRRP” 基本配置

    VRRP(虚拟路由器冗余协议),该虚拟路由器是由一个Master设备和若干Backup设备组成。正常情况下,业务全部由Master设备承担,所有用户端仅需设置此虚拟IP为网关地址。当Master出现故障时,Backet接替工作,及时将业务切换到备份路由器,从而保持通信的连续性和可靠性。而用户…...

    2024/4/29 3:46:54
  4. 网络:Java用Netty实现一个群聊服务器与群聊客户端

    记录一下实现代码,写得很粗糙,先启动1个服务端,然后起1到多个客户端,每个客户端先控制台输入聊天昵称,然后可以在聊天室发送消息。退出时输入特定字符 “_bye_” 即可退出群聊。服务器会显示所有聊天过程(包括系统信息)。客户端在线时也能收到所有聊天信息(包括系统信息…...

    2024/4/29 3:46:52
  5. 中国大学MOOC在线平台刷课浏览器插件安装使用教程

    每个平台的网课都有相应的测试,然鹅这些测试对于那些坚持快乐学习至上原则的同学就不是那么友好了,本着让这部分同学也能享受考高分的乐趣,找到了一些让网课学习更快乐的小帮手。正式教程:使用暴力猴插件管理器,添加下列脚本,实现自动刷课(不会下载安装的我给整了份视频教…...

    2024/4/29 2:53:08
  6. 关于三叶浆

    现在清楚他们为什么用三叶浆了,之前因为只是穿越机用三叶浆为了增大拉力,其实不仅仅是这样。为了把无人机做小,,浆尺寸会变小,而拉力不变小,确实需要三叶浆。所以我后来所赐看到他们做无人机SLAM的用三叶浆了。下面拍自全权的《多旋翼飞行器设计与控制实践》...

    2024/4/29 3:46:50
  7. 设计思维

    设计思维,一是积极改变世界的信念体系;二是一套如何进行创新探索的方法论系统,包含了触发创意的方法,是一种以人为本,目标导向的思维模式。设计思维以人们生活品质的持续提高为目标,依据文化的方式与方法开展创意设计与实践。简单地说,设计思维就是通过提出有意义的创意…...

    2024/4/29 3:46:49
  8. 如何在centos8上使用pyenv安装多版本python3

    官方python下载平台 https://www.python.org/downloads/ pyenv 安装网址 https://github.com/pyenv/pyenv-installer pyenv是源代码编译安装Python解释器,所有需要安装gcc等依赖包yum install git curl python 编译安装需要的依赖包如下 yum install gcc make patch gdbm-deve…...

    2024/5/3 5:32:52
  9. HZNUOJ 2803 二维前缀和+gcd

    神枪手JoneySun (Easy Version) Time Limit: 1 s Memory Limit: 256 MB Submission:146 AC:32 Score:100.00 Description Easy Version 和 a little bit hard Version 只有数据范围的区别 JoneySun被邪恶的wifepie困在了一个由11的网格分割的监狱里,邪恶的…...

    2024/5/6 13:15:51
  10. Java基础-循环语句

    Java 循环结构 - for, while 及 do...whilewhile 循环do... while 循环for循环Java 增强 for 循环break 关键字continue 关键字 Java中有三种主要的循环结构:while 循环 do…while 循环 for 循环while 循环 基本while循环,只要布尔表达式为 true,循环就会一直执行下去。 whi…...

    2024/5/2 22:40:35
  11. C++ 结构体案例笔记

    案例描述1 学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下: 设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员 学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值 最终打印…...

    2024/5/2 15:28:00
  12. Errors during downloading metadata for repository ‘AppStream‘解决方法

    在阿里云服务器centos7上,Dockerfile中写了一句RUN yum -y install vim,结果build的时候就一直出错最后是发现因为把防火墙关了,把防火墙打开就可以了。 systemctl start firewalld.service...

    2024/4/29 3:46:45
  13. nginx启动停止命令

    进入sbin文件夹 ./nginx ./nginx -t # 验证配置文件;无法验证其它文件的情况 ./nginx -s reload # 重新加载;可以重启其它文件启动的情况 ./nginx -s stop # 快速停止 ./nginx -s quit # 正常停止 ./nginx -V # 查看版本 ./nginx -c conf/web01.conf # 使用另一个配置文...

    2024/5/3 23:01:19
  14. Python处理Excel文件

    import xlsxwriter #用于向Excel文件中写数据 import xlrd #用去从Excel文件中读取数据 import os.path #读取指定目录下的所有文件使用Python新建一个Excel文件 workbook = xlsxwriter.Workbook(有限公司.xlsx) 创建一个工作表,所说的sheet表 worksheet = …...

    2024/5/6 11:27:41
  15. RabbitMQ之(延迟队列)

    什么是延时队列,延时队列应用于什么场景 延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费。 那么,为什么需要延迟消费呢?我们来看以下的场景 网上商城下订单后30分钟后没有完成支付,取消订单(如:淘宝、去哪儿网) 系统创建了…...

    2024/5/3 3:37:35
  16. Linux网络协议栈(一)——Socket入门

    https://www.cnblogs.com/hustcat/archive/2009/09/17/1568765.html3、套接字的实现 套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构: 3.1、BSD套接字 3.1.1、核心数据结构 为了实…...

    2024/5/2 16:41:46
  17. Apache web服务器 的下载安装

    Apache web服务器 的下载安装 下载 进入官网 http://httpd.apache.org/ 1.点击 Apache httpdXXX x下的 Download [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJAVWJRS-1596812780685)(G:\PHP\Apache-httpd\Apache 服务器的安装\20200807223806.pn…...

    2024/5/6 11:00:53
  18. window系统出现开机提示bootmgr is compressed,重启无法解决

    window系统出现开机提示bootmgr is compressed第一步,明确问题的根源第二步,制作u盘启动盘第三步,进入PE界面修改扩展,对于出现的其他问题,后期进行更新 第一步,明确问题的根源 该问题的原因就是勾选这个压缩此驱动器以节约磁盘空间,但是系统无法启动,所以我们需要通过…...

    2024/4/29 3:46:40
  19. PHP编程 用mysqli扩展库、mvc模式实现简单的雇员管理系统

    PHP编程 用mysqli扩展库、mvc模式实现简单的雇员管理系统 view(视图) login.php <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-…...

    2024/4/29 3:46:39
  20. 蔚来EC6在4s店的维修保养记录

    车最大亮点在于采用溜背造型,使其运动化视觉效果大幅提升。同时,隐藏式门把手以及更为平滑圆润的车顶设计,使其风阻系数低至0.27Cd。尾部方面,鉴于溜背造型的设计特点,新车的低重心姿态彰显的更为淋漓尽致。而两侧尾灯组的搭配,则起到了很好的点缀效果,夜间点亮后的辨识…...

    2024/4/29 3:46:41

最新文章

  1. 新手开抖店多久可以出单?做好这两点!七天必出单!

    哈喽~我是电商月月 很多新手开抖店长时间不出单&#xff0c;觉得不正常&#xff0c;害怕新手根本做不起来店&#xff0c;就会搜索&#xff1a;新手开抖店多久可以出单&#xff1f; 新手开店&#xff0c;合理运营的话&#xff0c;七天里肯定是能出几单的&#xff0c;但没做好的…...

    2024/5/6 13:25:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 安卓java打包uniapp原生插件 和 uniapp使用安卓android原生插件

    1.uniapp dcloud官方文档 简介 | uni小程序SDK 2.前提&#xff0c;需要有经验的安卓java开发人员&#xff0c;并且同时具备uniapp移动端开发经验。说明&#xff1a;android打包的.aar和uniapp需要的.aar是不一样的&#xff0c;uniapp需要的.aar是需要有一些特定配置的&#x…...

    2024/5/6 8:43:04
  4. 面试经典算法系列之双指针1 -- 合并两个有序数组

    面试经典算法题1 – 合并两个有序数组 LeetCode.88 公众号&#xff1a;阿Q技术站 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#…...

    2024/5/5 8:39:32
  5. 方案分享 | 嵌入式指纹方案

    随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…...

    2024/5/5 9:24:11
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/5 18:19:03
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/5 12:22:20
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/5 19:59:54
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/6 7:24:07
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/5 15:25:47
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/6 7:24:06
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/6 1:08:53
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/5 18:50:00
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/6 0:27:44
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/5 13:14:22
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/5 17:03:52
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/5 21:10:50
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/6 7:24:02
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/6 7:24:01
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/5 17:03:21
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/5 15:25:31
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57