Java中名词解释一篇

136 阅读6分钟
  • 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

什么是类:

类相当于图纸。对象相当于是具体的事物;

对象就相当于你画的每一个工程图

一张图纸可以创造多个工程图,也就是创建多个对象,不同的东西。

怎么创建对象

类   引用  =  new   类();

什么是对象:

1、某一事物的某个具体存在,

2、该事物的一个具体体现,具体的存在

类:

属性与方法的集合,是一个抽象的概念

实例:

只要有new关键字,就产生一个新的实例(也叫对象)

引用:

Person person; person = new Person("张三"); person = new Person("李四");

person先指向了“张三”这个对象,然后又指向了“李四”这个对象。

总结:

一个引用可以指向多个对象,一个对象可以被多个引用所指。

Person person1 = new Person("张三"); Person person2 = person1;

person1与person2都是指向“张三”这个对象。

面向对象:

复杂事情简单化

把执行者变成指挥者

面向过程:

执行者一个步骤一个步骤的去完成。但凡有一个步骤少了,该事情就不能完成

构造方法:

1.     初始化对象

2.     对象默认使用的是无参构造

3.     public 类名(参数){这是有参构造}

4.     不能有返回值类型

this:

this当前类的对象。

获取当前类中的方法或属性

封装:

事物的属性与行为,放在类中,隐藏对象属性和实现细节,仅对外提供公共的访问方式。

继承:

子承父业

作用:

提高代码的复用性

 

高内聚,低耦合

Java中使用变量的规则:

就近原则,顺序:局部变量--当前类的成员变量--父类成员变量

多态

解释:一个对象在不同情况展现出来不同形态

编译看左,运行看右

父类引用指向子类对象

使用场景:

父类可以作为形参的数据类型,可以接收任意的子类对象

 

抽象类:

包含抽象方法的类,用修饰abstract

抽象方法:

没有方法体,只有方法声明,用修饰abstract(子类必须重写)

抽象方法的由来:

需要定义一个方法,但是不明确方法的具体实现。

类里的成员

a)     成员变量

b)     成员方法(局部变量)

c)     构造方法

抽象类特点:

5.     用修饰abstract

6.     不能实例化

7.     父类引用指向子类对象(可以达到初始化)

8.     子类普通类继承抽象类   实现抽象方法

9.     子类抽象类,则不用实现抽象方法

抽象类的成员特点:

可以有成员变量,与成员常量

构造方法的重载

有抽象方法与非抽象方法

常量:

final修饰   且常量名大写

final关键字:

修饰类:不能被继承,但是可以继承其他的类

修饰方法:该方法不能没重写

修饰变量:最终变量,即常量,只能赋值一次

static关键字:

被本类所有对象共享(修改后其他值都会发生改变)

调用方式:

类名.变量名

类名.方法名

接口:就是一个契约、约定

定义:

描述类具有什么功能,但是并不给出具体的实现,接口是对外提统一组规则,标准。

接口修饰符都是public 抽象作为修饰符,可以省略不写。

接口是不能实例化的,要通过父类引用指向子类对象。

接口与接口:多继承性   

格式:

接口继承接口,接口。。。。。

父类中定义:共性内容

接口定义:扩展内容

接口是子类

普通类:必须实现接口中的方法

抽象类:可以不实现接口中的方法

接口与类:

实现关系:可以单实现,也可以多实现

接口与接口:

继承关系:单继承,还可以多继承

api文档

类的使用说明书

Object类

to string()返回对象字符串 不同对象的地址值不同

Java.long.包下的类不需要导包,否则需要先导包在使用。

结论:

不同对象的hashcode不同

getClass()返回的字节码文件对象,说明一个类只一个字节码文件

全类名:包名+类名 例如:java.long.Object

多态

clipboard.png

//多态 Fu fu = new Fu(); //父类引用不能使用子类特有成员 fu.getId();点不出来 Fu zi = new Zi(); zi.getId();点不出来 Zi zi1 = new Zi(); zi1.getId();可以点不出来 //需要向下转型,才可以获得父类的方法 Zi fu1 = (Zi) fu; fu1.getId();可以点不出来

StringBuilder:

是一个可变的,字符序列,内部长度可变的数组。

包装类

基本类型 包装器类型
booleanBoolean
charCharacter
intInteger
byteByte
shortShort
longLong
floatFloat
doubleDouble

装箱:

基本类型转换成包装类

拆箱:

包装类转换成基本类型

将字符串类转换成基本数据类型

包装类. parseXXX()

String string = "8989"; int i1 = Integer.parseInt(string); System.out.println(i1); 输出:8989

集合:

用来存储多个元素的容器

单列集合:List、set

双列集合:map

变量与常量比较的时候:

要常量写在前变量写在后

迭代器:

普通迭代器在遍历集合的同时不能添加过删除元素,否则回报并发修改异常

列表迭代器在遍历集合的同时可以修改集合中的元素(添加,删除)必须是使用列表迭代器的方法(listIterator)

ListIterator listIterator = list.listIterator(); while (listIterator.hasNext()) {     Student student = new Student("黄波1", 12);     Student next = listIterator.next();     System.out.println(student.equals(next));//因为是false所以没有提娜佳成功     if (student.equals(next)) {         Student student2 = new Student("黄波222", 2212);         listIterator.add(student2);     }     System.out.println("next:::::::::::"+next); } System.out.println(list);

泛型

任意类型,参数话类型(传过来什么类型就是什么类型)任意类型

泛型一般与集合类相结合

List<泛型> list= new ArrayList<>();

Collections就是针对集合进行操作一个工具类

代码:

ArrayList list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(6); list.add(3); System.out.println(Collections.max(list));最大值 Collections.sort(list);倒序排列 Collections.reverse(list);反转 System.out.println(list); 输出: 6 [1, 2, 3, 3, 4, 6]

Map集合:

元素第一次添加,返回null

重复添加会用新值覆盖旧值,返回旧值

HashMap<Integer, Student> hashMap = new HashMap<>(); Student put = hashMap.put(1, new Student("张强", 21)); System.out.println(put); Student put1 = hashMap.put(1, new Student("张3", 22)); System.out.println(put1); //        hashMap.put(2, new Student("张慧", 23)); System.out.println(hashMap); 输出: null Student{name='张强', age=21} {1=Student{name='张3', age=22}}

异常处理:

try {     尝试执行的代码!     System.out.println("=========="); } catch (Exception exception) {     出现异常之后处理的代码     exception.printStackTrace(); }finally { //即使在try、catch中加return,fianlly中的代码也会执行。     一定会执行的代码 }

throw:

执行结束后,程序不在继续执行。

string中的方法:

String s1 = "qiansheng"; String s = "SongXianYang"; System.out.println(s.toString()); System.out.println(s.charAt(1)); System.out.println(s1.compareTo(s)); System.out.println(s.concat("1212121")); System.out.println(s.indexOf("X")); 输出: SongXianYang o 30 SongXianYang1212121 4

线程安全与线程不安全

多个线程访问同一个资源

一个线程访问一个资源

线程安全:在多线程访问时,采用加锁机制,一个线程访问某条数据时,该线程读取完,释放了线程,下一个线程才可以访问。

线程不安全:没有数据保护,多个线程下去访问同一个资源会发生数据脏读。

this与super:

this:表示调用本类中的方法和属性,本类对象的引用,指向本类对象。

super: 表示在子类中调用父类的方法和属性,父类对象的引用,指向父类对象。

异常可以分为:

运行时异常RuntimeException:NullPointerException、ClassCastException

检查异常CheckedException:IOException、SQLException

异常处理的处理方式:

一是、throw,

二是、 throws

三是、try catch 捕获异常

Synchronized

应用方式:

普通同步方法,锁对象是当前实例对象。

静态同步方法:锁当前类的class对象。

同步方法块:锁是括号里面的的对象。

总结:保证了一个线程,只能访问一个资源。即一个线程访问,另一个线程等待。

blog.csdn.net/zjy15203167…

Java中堆栈内存分布:

image.png

blog.csdn.net/qq_26805137…

image.png

Java中short a=1;a=a+1和a+=1的区别及+=的类型转换

short a=1; //a= (a+1);//类型不匹配:不能从 int 转换为 short a=(short) (a+1); a+=1;

对于short a=1; a=a+1; 由于a+1运算时会自动提升表达式的类型,也即int类型,再将结果赋值给short类型的a时,类型会不匹配;

对于short a=1; a+=1; java编译器会对+=进行特殊处理,进行了类型转换,通过反编译.class源码可以看到a+=1被编译为:a=(short) (a+1)

JAVA规范上说 【e1+=e2    实际上是    e1=(T1)(e1+e2) 】,其中T1是e1的数据类型

blog.csdn.net/wo211898/ar…

heap和stack有什么区别? 

 Heap(堆):用来存放new出来的对象

Stack(栈):存放对象的引用。