Java语法

Java语法

1.字符串常量和字符型常量区别

形式:字符常量是单引号引起的一个字符;字符串常量是双引号引起的若干个字符
含义:字符型常量相当于一个整型值,可以进行表达式运算;字符串常量是一个地址值,就是该字符串在内存中存放位置
占内存大小:字符型常量占2个字节;字符串常量占若干字节
注:char在Java中占两个字节
Java确定每种基本类型所占存储空间的大小
char 2字节 short 2字节 int 4字节 long 8字节
byte 1字节 float 4字节 double 8字节

2.标识符和关键字

标识符就是一个名字,对于一些标识符,Java语言赋予了特殊含义,这种特殊的标识符就是关键字。
关键字是被赋予特殊含义的标识符。

3.Java泛型,类型擦除,常用的通配符

Java泛型是JDK5中的新特性,泛型提供了编译时类型安全检测机制,该机制允许编译时检测到非法的类型。
泛型的本质:参数化类型,即所操作的数据类型被指定为一个参数。
Java的泛型是伪泛型(在编译期间,所有的泛型信息都被擦掉——类型擦除)

泛型有三种使用方法:泛型类,泛型接口,泛型方法

1.泛型类
//T,E,K,V等参数常用于表示泛型
public class Text<T>{
private T key;
public Text(T key) this.key=key;
public T getKey() return key;
}
//在实例化泛型类时,必须指定T的具体类型
//实例化泛型类:
Text<Integer> I=new Text<Integer>(23233);
2.泛型接口
public interface Text<T>{
public T method();
}
//实现泛型接口,不指定类型:
class TextImpl<T> implements Text<T>{
public T method(){
return null;
}
}
//实现泛型·接口,指定类型:
class TextImpl<T> implements Text<String>{
public String method(){
return "23233";
}
}
3.泛型方法

泛型的通配符:T,E,K,V,?
?是不确定的java类型
T(type)是具体的一个java类型
K,V (key,value)代表java的键,值
E(element)代表元素

public static <E> void prin( E[] inputArray){
for(E element:inputArray){
System.out.print("%s",element);
}
System.out.println();
}
//创建不同类型的数组
Integer[] arr={2,3,3};
String[] arrs={"23","233"};
prin(arr);
prin(arrs);

4.==与equals

==的作用:判断两个对象的地址是不是相等。即判断两个对象是不是同一个对象。
注:基本数据类型比较的是值,引用数据类型比较的内存地址
(java只有值传递,对于= = ,基本数据类型和引用数据类型,都是比较值)
equals()的作用:判断两个对象是否相等。不能用于比较基本数据类型的变量。该方法存在于Object类中,而Object类是所有类的直接或间接父类。equals()的方法有两种使用情况:
1.类没有覆盖equals()方法,通过equals()比较该类的两个对象时,等价于用= = 来比较这两个对象。使用的是默认的Object类的equals()方法。
2. 类覆盖了equals()方法,若两个对象的内容相等,则返回true,认为这两个对象相等。
注:
String中的equals方法是被重写过的,因为Object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值;
创建String类型的对象时,JVM在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋值给当前引用,如果没有就在常量池中重新创建一个String对象。

5.hashCode()和equals()

重点:

为什么重新equals时必须重写hashCode方法?
如果两个对象相等,则hashCode一定也是相同的。而两个对象相等,对两个对象分别调用equals方法都是返回true;两个对象有相同的hashCode值,两个对象也不一定是相等的。所以,equals方法被覆盖过,则hashCode方法也必须被覆盖。
补充:hashCode()默认对堆上的对象产生独特值,没有重写该方法,则class的两个对象无论如何不会相等。

hashCode

  1. 介绍
    作用是获取哈希码,也被称做为散列码。实际上是返回一个int的整数。该哈希码的作用是确定该对象在哈希表中的索引位置。hashCode()定义在JDK的Object类中,意味着Java中的任何类都包含了该函数。
  2. HashSet如何检查重复?
    当把对象加入到HashSet时,它先会计算对象的hashcode值来判断对象加入的位置,同时会与其他加入过的对象的hashcode值作比较,没有相同的hashcode值,则HashSet假设对象没有重复。如果有相同的hashcode值的对象,会调用equals()方法来检查hashcode相等的对象是否真的相同,如果相同不让其加入操作成功,如果不同,重新散列到其他位置。
  3. 为什么两个对象有相同的hashcode值,他们也不一定相等?
    hashcode()使用的杂凑算法可能会让多个对象传回相同的杂凑值。而上一个问题的hashset在对比的时候,同样的hashcode有多个对象,它会使用equals()来判断是否真的相同。即hashcode是用来缩小查找成本的。

6.基本数据类型

有八种基本数据类型:
6种数字类型:byte,short,int,long,float,double
1种字符类型:char
1种布尔型:boolean

自动装箱和拆箱

装箱:将基本类型用它们对应的引用类型包装起来
拆箱:将包装类型转换为基本数据类型

8种基本类型——常量池

基本类型的包装类大部分实现了常量池技术
默认创建数值[-128-127]的相应类型的缓存数据:Byte,Short,Integer,Long
character创建了数值在[0,127]范围内的缓存数据
Boolean返回True 或者 False
两种浮点数类型的包装类Float,Double没有实现常量池技术

7.方法的返回值

获取某个方法体中的代码执行后产生的结果。返回值的作用是接收出结果,使它可以用于其他操作。

8.Java中只有值传递

值调用表示方法接收的是调用者提供的值
引用调用表示方法接受的是调用者提供的变量地址
总的来说,在程序设计语言中,一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
Java程序设计语言采用按值调用。方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。
总结(java中方法参数的使用):

  1. 一个方法不能修改一个基本数据类型的参数
  2. 一个方法不能让对象参数引用一个新的对象
  3. 一个方法可以改变一个对象参数的状态

9.重载和重写

重载:同样的一个方法能够根据输入数据的不同,做出不同的处理
重写:子类继承自父类的相同方法,输入的数据是一样的,但是响应或者说方法中的内容不同的时候,就需要覆盖父类方法。

重载

发生在编译期,同一个类中,方法名相同;参数类型,个数,顺序不同,方法返回值和访问修饰符可以不同。

重写

重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。

  1. 返回值类型,方法名,参数列表相同;抛出的异常范围小于等于父类,访问修饰符范围大于等于父类,访问修饰符范围大于父类。
  2. 父类方法访问修饰符为private/final/static,则子类就不能重写该方法, 但是被statici修饰的方法可以被再次声明
    总结:重写是子类对父类方法的重新改造,外部样子不变,但是内部逻辑可以改变。
区别重载重写
范围同一个类子类中
参数必须修改一定不修改
返回类型可修改一定不修改
异常可修改可以减少或删除,一定不能抛出新的或更广的异常
访问修饰符可修改一定不能更严格(可降低)
发生阶段编译期运行期

10.深拷贝和浅拷贝

  1. 浅拷贝:
    对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
  2. 深拷贝:
    对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值