Java笔记

本文详细介绍了Java中的关键字和保留字,例如public、private、int等,并讨论了面向对象编程的概念,包括面向对象和面向过程的区别,以及Java中的面向对象特性,如封装、继承和多态。此外,还涵盖了类、对象、构造器、包装类、异常处理和多线程等核心概念。
摘要由CSDN通过智能技术生成


尚硅谷视频学习:

Java中的关键字和保留字:

关键字:public ,private,int 等等,true ,false,null属于比较特殊的关键字
保留字:goto,const,现在的java版本没有当作关键字,而在c++等语言中是作为关键字的,Java以后的版本也可能是变成关键字,所以要避免使用。

面向对象

面向对象和面向过程的区别:

例子:人将大象装进冰箱
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
面线对象的语言有:
java,python,go等
面向过程的语言有:
c,Fortran

属性=成员变量=field=域,字段
方法=成员方法=函数=method
创建类的对象=类的实例化

在这里插入图片描述

Java中的@Test的作用:
是该方法可以不用main方法调用就可以测试出运行结果,是一种测试的方式,一般函数都需要有main方法调用才能执行,注意被测试的方法必须是public 修饰的

this指针,this指的是当前this的类,等同于类.变量
封装,写一个方法,进行赋值,用类.方法赋值,而不用类.变量赋值,用private禁止类.变量赋值同时可以在赋值方法中用if等田间语句进行限制
在这里插入图片描述
修饰类的时候只能用缺省和public
构造器:
1.造对象
2.给对象进行初始化
在new对象的时候用的都是构造器,构造器可以用来创造对象,也可在创造对象的同时给属性进行初始化
构造器可以构成重载
当有重载的时候,必须写空的构造器(一旦定义了类的构造器,系统就不再提供默认的空参构造器了)

对象数组:如银行下有多个账户,此时 用 account [] account,(account是账户对象)

package关键字:
在这里插入图片描述
import:调包
在这里插入图片描述
在这里插入图片描述
java中的输入

package test;
import java.util.Scanner;

public class ScannerTest {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入:");
		String input=sc.nextLine();
		System.out.println(input);
	}
}

ECLIPSE快捷键:
在这里插入图片描述
在这里插入图片描述
继承
继承要用到extends关键字
在这里插入图片描述
子类继承了父类后,就获取了父类所有的属性和方法,包括私有的,但是因为封装性的影响,不能直接调用
java只支持单继承,但是可以实现多个接口
所有的类都直接或者间接继承Object 类,意味着所有的java 类都具有java.lang.Object类声明的功能
重写
方法名,形参列表必须和父类的一样,重写一般用来子类继承父类的方法时,不太适合,这是就需要重新把方法重写。面试题:重写和重载的区别**

super关键字
他可以调用父类的方法或者属性,当子类的有和父类相同的属性时,想调用父类的属性,此时就需要用super关键字,super就类似于this一样
在这里插入图片描述在这里插入图片描述
多态
如父类为person,子类为man,
person p=new man();这个时候就体现出类多态在这里插入图片描述
在这里插入图片描述
具体内容可以看包duotai
面试题 多态是编译时行为还是运行时行为
instanceof关键字
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用强转时容易出现ClassCastException异常,这时候就需要用instanceof关键字测试一下

面试题==和equals的区别
在这里插入图片描述
equals只能用于引用数据类型!!!!!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以总的来说==和equals的区别是,当比较基本数据类型时,只能用==,比较引用数据类型的时候,==和equals比较的都是地址
虽然自定义的代码也属于引用数据类型,但是它需要重写才能体现出比较的是内容而不是地址
一般自定义的类我们也想比较时,它默认用的是Object中的equals方法,此时比较的是地址,所以我们需要重写
重写步骤:1.首先比较当前对象是否和形参的对象地址相同,若相同,则表示他们是同一个对象(地址相同)
2用instanceof判断他们是否属于一类,若根本就不是一类,那肯定就没有比较的意义了,若成立,然后再把形参强转下来???,

toString方法
在这里插入图片描述
就相当于用System.out.println(对象);这样输出的结果是这个对象的地址
自定义类也可以重写toString方法,当调用此方法时,返回对象的实体内容

包装类
Java是面向对象的语言,每一种基本数据类型都应该有对应的对象类型,方便对基本类型进行操作。包装类型可以解决一些基本类型解决不了的问题,

1 .有时候一个函数需要传递一个Object变量 而你想传递int类型的进去显然不行,这就要用到包装类。

public void test(Object obj){
}
//想传递5进去就可以这样
test(new Integer(5));

2 集合不允许存放基本类型数据,只能存放包装类型
3 基本类型和包装类之间可以相互转换

基本数据类型----->>包装类:当有一些方法的形参是如果是一个类类型的(如Object),这时必须转换才能用
int num1=10;
Integer in1=new Integer(num1)
包装类---->>基本数据类型当需要进行一些加减乘除的时候,这时就需要转换
当in1是 Integer 类时,用in1.intValue()可以将它转换成int类型,其他类型相似
String类型—>>基本数据类型,包装类:调用包装类的parseXXX(String s)方法
JDK 5.0之后新特性,系统会自动装箱和拆箱
在这里插入图片描述
object类及内部方法,数组也是一种特殊的类
栈:局部变量
堆:new出来的结构:对象,数组
方法区:类的加载信息,静态域,常量池
static关键字:
static可以修饰属性,方法,代码块,内部类
用static修饰属性:
在这里插入图片描述
用static修饰方法:
在这里插入图片描述
因为static静态变量在类加载的时候就出现了,那个时候还没有对象,所以不能用this,this表示当前对象的什麽什麽。它的生命周期比this早
一个程序中可以有多个main,只不过需要确认将哪个main定义为入口
单例的饿汉式和懒汉式
代码块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由父及子,静态先行
①->②/⑤ ->③-> ④
final关键字
final 修饰的类不能有子类(不能被继承)
final 修饰的方法不能被重写
final修饰的变量,此时的“变量”就成常量了
final修饰属性:可以考虑的位置有2,3,4
final修饰局部变量,修饰形参时,当调用此方法时,给常量形参赋值一个实参,此时在该方 法中的形参就不能进行改变值了

static final用来修饰属性 :全局常量
static final用来修饰方法

abstract关键字
abstract修饰的类:此类不能实例化,抽象类一定有构造器,便于子类实例化时调用
abstract修饰的方法:抽象方法只有方法的声明,没有方法体(没有大括号,只有一个分号),包含抽象方法的类,一定是一个抽象类。一般当父类的方法不知道怎么写的时候,比如几何图形让求面积,这个时候根本就没有办法写,只有子类圆,正方形等等才可以写,这个时候就需要用abstract修饰求面积的这个方法
若父类中有抽象方法,则子类必须重写此方法,或者子类也是抽象类

interface关键字
接口和类是两个并列的结构,继承是一个“是不是”的关系,接口是一个“能不能”的关系
接口不能有构造器,不能实例化,interface xxx{},接口中定义的变量都是默认加上public static final的, 定义的方法都是加上public abstract的
接口和接口之间可以多继承
implements关键字
接口通过让类去实现(implements)的方式来使用,实现多个接口可以用逗号隔开
格式class AA extends BB implements CC,DD,EE

内部类
内部类分为局部内部类和成员内部类
局部内部类:
在方法,构造器,代码块外
成员内部类
在方法,构造器,代码块内
成员内部类可以调用外部类的结构,可被static修饰
在这里插入图片描述
异常
用try处理可能出错的地方,catch捉住异常,然后执行
在这里插入图片描述
应该把范围小的写上面,大的写下面
在catch中可以调用e.getMassage(),和e.printStrackTrace()
在try中声明的变量,在外面不能用
finally
在这里插入图片描述
单核CPU和多核CPU
在这里插入图片描述
在这里插入图片描述
多线程
在这里插入图片描述在这里插入图片描述
start 方法的作用
1.启动当前的线程
2.调用当前线程的run()方法

不可以还让已经start的线程去执行,需要重新创建一个线程对象
在做项目的时候,如果该线程只被用了一次,一般使用匿名子类的方式创建线程

new Thread(){
public void run(){
线程所执行的内容
}
}.start

Thread类的有关方法:
void start():启动线程,并执行对象的run()方法
run()线程再被调度室执行的操作
String getName()返回线程的名称
String setName()设置线程的名称
void setName(String name):设置该线程名称
static Thread currentThread()返回当前线程,在Thread子类中就是this,通常用于主线程和Runanable实现类
yield()释放当前cpu的执行权

集合:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
foreach在这里插入图片描述
在这里插入图片描述这个时候arr中存储的数值没有发生改变,他只是改变了num这个形参的数值
添加在这里插入图片描述
迭代器:在这里插入图片描述
因为foreach只能遍历,不能进行删除修改添加等操作,此时就应该使用iterator;
判断是否存在
在这里插入图片描述
List接口
在这里插入图片描述在这里插入图片描述在这里插入图片描述
String和StringBuffer的区别
String定义的字符串,String 声明的是一个地址,当你改变它的值时,不是重新给它赋值,而是重新申请了一个地址。也就说:你是申请另外一个变量。
StringBuffer定义的字符串可以改变在这里插入图片描述在这里插入图片描述在这里插入图片描述
e在这里插入图片描述
Collection的子接口set在这里插入图片描述
若要用根据自己写的类进行排序的话,用TreeSet, 他默认是不会排序的,因为他没有实现java.lang.comparable接口,要实现这个接口,此时才会排序
若要用根据自己写的类进行不重复操作的话,最好用HashSet,但是你会发现执行过后有重复的,判断两元素是否重复的依据是:equals方法,而自己写的类要重写equals方法才可以实现不重复操作

Map:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
map的实现类在这里插入图片描述
总结在这里插入图片描述

泛型在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值