java基础知识简单总结


说明:[ ]中的内容都是可有可无
有时间写下各种数据类型转换的方法

一、idea工具使用技巧:

  1. 查看某个方法形参:ctrl + p

二、eclipse工具使用技巧:

  1. 快速导报:ctrl + shift + o
  2. 快速生成变量名: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.方法名()

修饰符类内部同一个包不同包的子类同一个工程
privateyes
friendly或default(默认缺省)yesyes
protectedyesyesyes
publicyesyesyesyes

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. 继承:属性继承问题 、多态、抽象看思维导图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值