文章目录
说明:[ ]中的内容都是可有可无
有时间写下各种数据类型转换的方法
一、idea工具使用技巧:
- 查看某个方法形参:ctrl + p
二、eclipse工具使用技巧:
- 快速导报:ctrl + shift + o
- 快速生成变量名:Shift + Alt + L
三、杂碎知识:
3.1、jdk、jre、jvm关系
jdk包括jre和jvm,jre包括jvm,jdk是开发java程序最小环境,jre是运行java程序最小环境,jvm是翻译java程序,使得java程序编译一次可以在多个系统使用。
3.2、javac命令完成的事情
①检查Java源码语法时候正确;②将.java源码文件编译成.class文件。(仅仅编译.Java文件,没有运行,.java文件不会被运行,只能被编译)
3.3、++和–练习
int c = 1;
c = c++; //++在后,先赋值后运算,但这是一种特殊情况.
System.out.println(c); //此时运行结果是1,
// ++ --练习题
int d = 1;
d = d++ + ++d + --d + d--;
System.out.println(d); //结果为8
/**
* 参与运算的值 实际d的值
* d++ 1 2
* ++d 3 3
* --d 2 2
* d-- 2 1
*将参与运算的值赋值给d:1+3+2+2
*/
// ++ --练习题
int a = 1;
int b = a++ + ++a - a-- + --a;
System.out.println(a); //结果为1
System.out.println(b); //结果为2
/**
* 参与运算的值 实际d的值
* a++ 1 2
* ++a 3 3
* a-- 3 2
* --a 1 1
*将参与运算的值赋值给b:1+3-3+1
*a的值为1
*/
3.4、操作符
操作符 | 描述 |
---|---|
& | 如果相对应位都是1,则结果为1,否则为0 |
l | 如果相对应位都是 0,则结果为 0,否则为1 |
^ | 如果相对应位值相同,则结果为0,否则为1 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充 |
3.5、修饰符
修饰类的关键字:public、缺省和final
修饰属性的关键字:public、protected、缺省、private和final
修饰方法的关键字:public、protected、缺省、private和final
修饰构造器的关键字:public、protected、缺省、private
修饰内部类的关键字:public、protected、缺省、private
- 权限控制修饰符:public、protected、缺省、private
- 注意:final修饰的属性不可被二次赋值,修饰的对象,指向地址不可修改但对象里的属性可以修改。
3.6、Java异常分为两类(异常都是Java中的一个类)
- xxxError这种错误一般是JVM虚拟机的错误,我们无法编写针对性的代码解决,
- xxxException这种异常一般是代码的错误,我们可以编写针对性的代码解决。
3.7、获取时间戳几种办法:
public static void main(String[] args) throws ParseException {
//第一种方法:
long time = System.currentTimeMillis();
System.out.println(time);
//第二种方法:
Date date = new Date();
System.out.println(date.getTime());
/**
* SimpleDateFormat---时间日期格式化类
* 可以实现将指定字符串格式转成Date日期对象
* 可以实现将Date日期对象按照指定格式转成字符串
*/
String timeStr = "2021-10=11 10:00:00.000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM=dd HH:mm:ss.SSS");
//是用来将字符串解析称为Date日期类的
Date date1 = sdf.parse(timeStr);
System.out.println(date1);
//将一个Date日期类对象转换称为指定的时间格式字符串
String t = sdf.format(date);
System.out.println(t);
}
四、着重注意的知识:
4.1、实体类中用Integer和int区别
4.2、java文件中复制文件地址,不能在(文件–>属性–>安全)中复制,前面会自动复制隐藏字符。idea中可看见隐藏字符。
4.3、构造函数有没有返回值?构造函数没有返回值。 举了个反例: String str = new String(“content”);
正解:new 的时候调用构造函数,返回给str; new 关键字被jvm识别后,就会在堆上创建对应类的对象,生成一个返回值(对象的内存地址),并且把对象的变量进行第一次初始化,有值的赋值,没有值的就赋0或者null,然后才是调用构造器方法,再进行对象变量的第二次初始化,之后,new动作产生的地址值返回给栈内存中 类的变量,存储起来。ps new动作产生对象之后,会加载对象变量,以及非静态方法的地址值,这个地址值指向方法区中对应类的实际的非静态方法,也就是说 静态方法 和 非静态方法都存在于方法区的类当中
五、数组:
5.1 数组存放的两种数据类型:①存放基本数据类型数组,②存放引用数据类型的数组
5.2. 一维数组的定义:
①数据类型[] 数组名/变量名 = new 数据类型[数组的长度]
②数据类型 []数组名/变量名 = new 数据类型[数组的长度]
③数据类型 数组名/变量名[] = new 数据类型[数组的长度]
④数据类型[] 数组名 = new 数据类型[]{值1,值2,…}
⑤数据类型[] 数组名={值1,值2,…}
- 注意:其中①②③是静态声明,④⑤是动态声明,数组长度一旦确定不能修改。
- 基本操作:
- 获取某个元素:数组名[索引]
- 给某个元素赋值:数组名[索引] = 值;
- 获取数组长度:数组名.length
5.3. 二维数组定义:
①数据类型[][] 数组名/变量名 = new 数据类型[数组的长度][数组的长度]
②数据类型[][] 变量名 =new 数据类型[][]{{元素1,元素2…},{元素1,元素2…,{元素1,元素2…}};
③数据类型[][] 变量名 ={{元素1,元素2…},{元素1,元素2…,{元素1,元素2…}};
六、集合:
6.11. 数组与集合区别:
①:数组长度一旦固定,不可更改,集合存放数据理论上没有上限,没有固定长度。
②:数组存放的数据可以是基本数据类型和引用数据类型,但集合只能存放引用数据类型。
6.2. 集合包括:
- Collection(单例):
- 存放重复数据List:ArrayList、Vector、LinkedList
- 存放不重复数据Set:HashSet(无序)、LinkedHashSet(有序)、TreeSet(有序)
- Map(双例,key值不能重复,value值可以):HashMap(key值无序)、HashTable、LinkedHashMap(key有序)、TreeMap(key有序)
6.3. Collection方法:
- int size() 返回集合中的数据个数
- boolean isEmpty(); 判断集合是否为空
- boolean contains(Object o); 判断集合中是否包含某个数据
- Iterator iterator();—核心的方法 这个方法执行完成返回一个迭代器,迭 器用于遍历集合元素的
- Object[] toArray(); 将集合转为数组
- boolean add(E e); 增加数据的
- boolean remove(Object o); 移除某个数据
- void clear(); 清空集合
6.4. Collection集合体系的通用遍历方式(list和set集合体系均适用)
①:使用增强的for循环集合元素
②:使用迭代器进行遍历
6.5. Map集合方法:
- size():int 集合中数据的条数
- boolean isEmpty(); 判断集合是否为空
- boolean containsKey(Object key); 判断集合是否包含某个key值
- V get(Object key); 根据map集合的key值获取对应的value值 如果没有 返回null值
- V getOrDefault(Object key, V defaultValue) 根据key值获取value值 如果找不到 返回一个默认值
- V put(K key, V value); 向map集合中添加一条key-value类型的数据
- V remove(Object key); 根据key值移除一条key-value数据
- void clear(); 清空集合
- Set keySet(); 获取map集合中所有的key值 并且返回一个set集合
- Collection values(); 获取map集合中所有的value值
- Set<Map.Entry<K, V>> entrySet(); 获取map集合中每一条数据Entry对象,并且封装为set集合
- boolean containsValue(Object value); 判断集合是否包含某个value值
6.6. Map集合遍历两种方式:
/**
* map集合的第一种遍历方式
*/
Set<String> keys = map.keySet();
for(String key:keys) {
Integer value = map.get(key);
System.out.println(key+"="+value);
}
/**
* map集合的第二种遍历方式
* entrySet返回的是一个Entry类型的数据 Entry中放的就是一条key value数据
* 将map集合中每一条key-value数据封装为一个Entry对象
*/
Set<Entry<String,Integer>> entry = map.entrySet();
for(Entry<String,Integer> en :entry) {
System.out.println(en.getKey()+"="+en.getValue());
}
七、面向对象:
7.1. 可变长形参:
- 语法:数据类型…形参名
- 实例:public void test(String name,int…array)
- 说明: ①可变长形参类似于数组,和数组不一样的地方在于,可以形参可以传递任意参数。②可变长形参在形参列表中只能有一个。③可变长形参只能位于形参列表的最后一个位置。
7.2. 类包括:属性、方法、构造器、代码块、内部类。
7.3. 属性声明语法:访问控制修饰符 [static] [final] 数据类型 属性名 {= 属性值}
注意:属性又名成员变量,和局部变量区别就是声明的位置不一样,并且没有声明属性值jvm会自动赋予默认值。局部变量不能使用访问控制修饰符和static关键字修饰。
7.4. 构造器
- 语法:访问控制修饰符 类名(形参列表){ 构造体 }
- 注意:如果没有声明构造器,jvm会默认给当前类自动创建无参构造器。
- 有参构造器目的:①构造类的对象。②初始化对象属性的值。③赋值的时候可以进行值的校验。
- 举例说明:
//无参构造器/无参方法
public Demo01() {
}
//有参构造器/有参方法
public Demo01(String name) {
this.name = name;
}
public Demo01(int age) {
if(age <0) {
this.age = 18;
}else {
this.age = age;
}
}
-
构造器的高级使用:
- 调用方法:this(实参列表)
- 调用限制:
①如果有n个构造器 最后只能有n-1个构造器使用this(参数列表)调用其他构造器
②构造器调用其他构造器的时候,this()调用语法必须写在构造器的首行
③构造器调用本类其他构造器的时候 最后只能调用一个,也可以一个都不调用
-
举例说明
public class Demo01 {
public String name;
public String na;
public int age;
//无参构造器
public Demo01() {
}
//有参构造器
public Demo01(String name) {
this();
this.name = name;
}
//有参构造器(方法重载)
public Demo01(int age) {
this("zs");
if(age <0) {
this.age = 18;
}else {
this.age = age;
}
}
//有参构造器(方法重载)
public Demo01(String name,int age) {
this(age);
this.name = name;
}
//主方法
public static void main(String[] args) {
Demo01 d = new Demo01("ls");
System.out.println(d.name);
}
}
7.5. 代码块:
- 语法:[static] { 代码块代码 }
- 注意:代码块的执行优于构造器的执行
7.6. 内部类(原则上可以无限类里套类):
- 语法:访问控制修饰符[static] [final] class ClassName{ 类的五大组成成分 }
- 使用:B是A的内部类:A.B b = new A().new B()
7.7. 注意:protected修饰的,子类调用:super.方法名()
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | yes | |||
friendly或default(默认缺省) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
7.8. final的属性的初始化有三种方式:
- 声明的时候直接初始化
public final String name = "zhangsan";
- 每一个构造器中都对常量属性赋值操作
public class Demo { public final String name; //无参构造 public Demo() { this.name = "zs"; } //有参构造 public Demo(String name) { this(); } }
- 代码块
public class Demo { { name = "zhangsan"; } public final String name; } ```
7.9. 封装定义:合理隐藏,合理暴露。给类、属性、方法、构造器、内部类设置权限(四个权限控制符)。
7.10. JavaBean定义:包括私有化属性、构造器、getter/setter/equals/toString/hashCode五种方法。再没有其他多余的方法,这种类称为JavaBean。
7.11. 继承:属性继承问题 、多态、抽象看思维导图
- 代码块
public class Demo { { name = "zhangsan"; } public final String name; }
7.12. 封装定义:合理隐藏,合理暴露。给类、属性、方法、构造器、内部类设置权限(四个权限控制符)。
7.13. JavaBean定义:包括私有化属性、构造器、getter/setter/equals/toString/hashCode五种方法。再没有其他多余的方法,这种类称为JavaBean。
7.14. 继承:属性继承问题 、多态、抽象看思维导图