java基础总结


在这里插入图片描述

如何使用帮助文档

1:打开帮助文档
2:点击显示,找到索引,看到输入框
3:知道你要找谁?以Scanner举例
4:在输入框里面输入Scanner,然后回车
5:看包
	java.lang包下的类不需要导入,其他的全部需要导入。
	
	要导入:
	java.util.Scanner
6:再简单的看看类的解释和说明,别忘了看看该类的版本
7:看类的结构
	成员变量(对象)	 -->  字段摘要 	
	构造方法	 -->  构造方法摘要 
	成员方法  -->  方法摘要
8:学习构造方法	
	A:有构造方法	就创建对象
	B:没有构造方法	成员可能都是静态的
9:看成员方法
	A:左边
		是否静态:如果静态,可以通过类名调用
		返回值类型:人家返回什么,你就用什么接收。
	B:右边
		看方法名:方法名称不要写错
		参数列表:人家要什么,你就给什么;人家要几个,你就给几个

JAVA的基本数据类型有哪些? int 占几个字节?

基本数据类型:	4类8种
		`在内存中存放的是数据值本身(所占内存大小固定)
	A:整数		占用字节数
		byte			1
		short		    2
		int 			4
	    long		    8	长整数值超过int型要加L或者l。
	B:浮点型
	float 		 4
	double		 8 	单精度的浮点数超过float型要加F或者f。
	C:字符
	char 		 2       只能表示单字符(可以存储一个中文汉字:java语言中的字符占用两个字节)且必须使用单引号括起来
	字符串常量是用""括起来的一串若干字符
	D:布尔
	boolean		 1
引用数据类型:

在内存中存放的是指向该数据的地址(c:指针)

**类 数组和接口等**
数据类型转换

默认转换 A:从小到大
B:byte,short,char – int – long – float – double
C:byte,short,char之间不相互转换,直接转成int类型参与运算。.
强制转换 A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);
扩展的赋值运算符的特点
隐含了自动强制转换。

(byte)  b3 = b1 + b2;(错,类型提升)
byte b = (byte)130;--->  -126  计算机中数据运算都是补码进行的

short s = 1;
        s += 1;//扩展的赋值运算符其实隐含了一个强制类型转换.
            // 不等价于 s=s+1; 而等于 s=(s的数据类型)(s+1);

在这里插入图片描述

面向对象?

面向对象的三大特征?

继承:(new dog) is (animal)一般类只能单继承,内部类实现多继承,接口可以多继承
封装:访问权限控制public > protected >> private 内部类也是一种封装
多态:同一个对象在不同时刻体现出来的不同状态。
	编译时多态,体现在向上转型和向下转型,通过引用类型判断调用	    哪个方法(静态分派)。
	运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。

构造方法(掌握): 用于对对象的数据进行初始化
A :方法名和类名相同
B :没有返回值类型,但不能写void
推荐:永远手动自己给出无参构造方法。

static关键字 饮水机(静态修饰)和水杯(不能)的问题
可以修饰成员变量和成员方法。

数据初始化的面试题

成员变量(对象) 就近原则
局部变量(方法)
静态变量(类)

  • 方法重载;方法重写
在同一个类中,方法名相同,参数列表不同。与返回值无关。
		sum(int a,int b ,int c)
		参数列表不同:
		        参数的个数不同。
		        参数的对应的数据类型不同。
 重写即覆盖
  • 一个类的初始化过程
	成员变量进行初始化
	默认初始化
	显示初始化
	构造方法初始化

抽象类和接口的区别。

•抽象类 被继承体现的是:”is a”的关系。共性功能
•接口 被实现体现的是:”like a”的关系。扩展功能
interface xxx{
public abstract void xx();}

Object类

A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。
B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解	
C:finalize() 用于垃圾回收,在不确定的时间
D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。

A:toString():把该类的所有成员变量值组成返回
B:equals()

  • ==和equals()的区别?
A:==
	基本类型:比较的是值是否相同
	引用类型:比较的是地址值是否相同
B:equals()
	只能比较引用类型。默认情况下,比较的是地址值是否相同。 
     但是,我们可以根据自己的需要重写该方法。

final, finally,finalize的区别。

String,StringBuffer,StringBuilder的区别?

    * 后者者长度和内容可变,前者不可变。
    * 如果使用后者做字符串的拼接,不会浪费太多的资源。
    StringBuffer:同步的,数据安全,效率低。
    StringBuilder:不同步的,数据不安全,效率高。(单线程中建议使用)

  B:StringBuffer和数组的区别?    StringBuffer最终放的是字符串数据
  
注意:String作为形式参数,StringBuffer作为形式参数
  String作为参数传递,效果和基本类型作为参数传递是一样的。
  • ## 数组高级(排序和查找)
    Arrays工具类 是针对数组进行操 作的工具类。包括排序和查找等功能。
    Integer(掌握)
String和int的相互转换
A:String -- int
		Integer.parseInt("100");
B:int -- String
		String.valueOf(100);
  -128到127之间的数据缓冲池问题   通过查看源码。我们就知道了针对
  -128到127之间的数据, 做了一个数据缓冲池。如果数据是该范围内的,每次并不创建新的空间
  Integer i =127;    //i==ii     i.equals(ii)  true 
  Integer i1 =128;  //i1==i2 false    i1.equals(i2)  true 

IO流

•如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流
字节缓冲区流

A:BufferedOutputStream(OutputStream out)
      BufferedOutputStream bos = new BufferedOutputStream(
			new FileOutputStream("bos.txt"));
		bos.write("hello".getBytes());
		bos.close();
  
    B:BufferedInputStream(IntputStream int)
    BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream("bos.txt"));
    
    字节缓冲区流仅仅提供缓冲区,为高效而设计的。
    但是呢,真正的读写操作还得靠基本的流对象实现。

字符流:

Reader
	|--InputStreamReader
			|--FileReader(简洁)
	|--BufferedReader(高效)
			String readLine():一次读取一个字符串
Writer
			|--OutputStreamWriter
					|--FileWriter
			|--BufferedWriter

	// 字符缓冲流一次读写一个字符串
	private static void method5(String srcString, String destString)
			throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(srcString));
		BufferedWriter bw = new BufferedWriter(new FileWriter(destString));

		String line = null;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		bw.close();
		br.close();
	}

序列化流(理解):把对象按照流一样的方式存入文本文件或者在网络中传输。
如何实现
在这里插入图片描述

多线程

。怎么启动?怎么停止?**

	A:继承Thread类
	B:实现Runnable接口
同步解决线程安全问题.
  	synchronized关键字       A:同步代码块 B:同步方法 C:静态同步方法
如何把一个线程不安全的集合类变成一个线程安全的集合类
			用Collections工具类的方法即可。

反射

反射:将类的各个组成部分封装为其他对象,这就是反射机制
* 好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。

获取Class对象的方式:

	1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
		* 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
	2. 类名.class:通过类名的属性class获取
		* 多用于参数的传递
	3. 对象.getClass():getClass()方法在Object类中定义着。
		* 多用于对象的获取字节码的方式

在这里插入图片描述
* 结论:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常用的

集合

类有哪些?**

HashMap底层实现结构有了解吗?
HashMap的长度为什么是2的幂次方?
HasMap的存储和获取原理
HasMap的扩容步骤
解决Hash冲突的方法有哪些?
哪些类适合作为HashMap的键?
ConcurrentHashMap和Hashtable的区别?
ConcurrentHashMap的具体实现方式

Collection
		|--List	有序,可重复
			|--ArrayList(查询)
				底层数据结构是数组,查询快,增删慢。
				线程不安全,效率高
			|--Vector(安全)
				底层数据结构是数组,查询快,增删慢。
				线程安全,效率低
			|--LinkedList(增删)
				底层数据结构是链表,查询慢,增删快。
				线程不安全,效率高
		|--Set	无序,唯一
			|--HashSet
				底层数据结构是哈希表。
				如何保证元素唯一性的呢?
					依赖两个方法:hashCode()和equals()
					开发中自动生成这两个方法即可
				|--LinkedHashSet
					底层数据结构是链表和哈希表
					由链表保证元素有序
					由哈希表保证元素唯一
    			|--TreeSet(排序用)
				底层数据结构是红黑树。
				如何保证元素排序的呢?
					自然排序
					比较器排序
				如何保证元素唯一性的呢?
					根据比较的返回值是否是0来决定

迭代器
–>是集合的获取元素的方式。容器的遍历也称迭代
泛型(掌握):
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。 该数据类型只能是引用类型

  • Map和Collection的区别? Collection和Collections的区别
A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
 B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

A:Collection 是单列集合的顶层接口,有两个子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等

Map集合的遍历

//方式1 键找值
			Set<String> set = hm.keySet();
			for(String key : set) {
				String value = hm.get(key);
				System.out.println(key+"---"+value);
			}
//方式2 键值对对象找键和值
			Set<Map.Entry<String,String>> set2 = hm.entrySet();
			for(Map.Entry<String,String> me : set2) {
				String key = me.getKey();
				String value = me.getValue();
				System.out.println(key+"---"+value);

Set集合(理解) —无序,唯一

详解https://blog.csdn.net/qq_44543508/article/details/102651841

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值