Java易错知识点

一、数据类型转换

1.四类八种:
基本数据类型: 整数(byte\int\short\long)、浮点数(float\double)、字符(char)、布尔(boolean)。
2.类型转换:
自动转换:将取值范围小的类型自动提升为取值范围大的类型。(int i=1,byte=2.i+b(int类型))
强制转换:将值范围大的类型强制转换成取值范围小的类型 。int i =(int)1.5
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double(小——>大)
范围小的数据类型值(如byte),可以直接转换为范围大的数据类型值(如int);
范围大的数据类型值(如int),不可以直接转换为范围小的数据类型值(如byte)
自动类型转换格式:
范围大的数据类型 变量 = 范围小的数据类型值;
int i = 100;
double d2 = i; 1054596
强制类型转换格式:
范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;
double d = 3.14;
int i2 = (int)d;

二、运算符

除法“/”当两边为整数时,取整数部分
“%”为整除取余符号,小数取余没有意义。结果符号与被取余符号相同。。

三、++ –

++,–运算符后置时,先使用变量a原有值参与运算操作,运算操作完成后,变量a的值自增1或者自减1;
int a = 3;
int b;
b = a++ + 10; a=4,b=13

++,–运算符前置时,先将变量a的值自增1或者自减1,然后使用更新后的新值参与运算操作。
int a = 3;
int b;
b = ++a + 10; a=4,b=14

四、逻辑运算符

&& 短路与 false&&true False
|| 短路或 false||true True
当使用短路与或者短路或时,只要能判断出结果则后边的部分就不再判断。

五、引用数据类型的使用(Scanner、Random)

引用数据类型的使用
与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。
数据类型 变量名 = new 数据类型(); 变量名.方法名( );

六、数组定义格式:

		格式1: int [] arr =new int[3];			
		格式2:  int [] arr =new int[]{1,2,3};				
		格式3: int[] arr ={1,2,3};

二维数组:
格式1:
数据类型[][] 数组名 = new 数据类型[m][n];
m: 代表二维数组中一维数组的个数
n: 代表每个一维数组中元素的个数
格式2:
数据类型[][] 数组名 = new 数据类型[m][];
m: 代表二维数组中一维数组的个数
每一个一维数组通过赋值来确定数组长度
格式3:
数据类型[][] 数组名 = {{元素值1,元素值2,…},{元素值1,元素值2,…},…};

七、方法

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
执行语句
………
return 返回值;
}
如果方法中没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。
方法定义的使用注意事项:
1.方法不能定义在另一个方法里。
2.调用时,如果有参数就写参数。
3.方法中是void,可以不写return
4.方法重复定义

八、重载

为了解决这个问题,Java允许在一个类中定义多个名称相同的方法,但是参数的不同 下面的三个方法互为重载关系
public static int add(int x,int y) {逻辑} //两个整数加法
public static int add(int x,int y,int z) {逻辑} //三个整数加法
public static int add(double x,double y) {逻辑} //两个小数加法
注意事项:
重载方法参数必须不同:(个数、类型、顺序)
重载只与方法名与参数类型相关与返回值无关
如void method(int x)与int method(int y)不是方法重载,不能同时存在
重载与具体的变量标识符无关(只需要看参数类型和参数列表)
如method(int x)与method(int y)不是方法重载,不能同时存在

九、方法参数传递

public class ArgumentsDemo01 {
public static void main(String[] args) {
int a=5;
int b=10;
change(a, b);//调用方法时,传入的数值称为实际参数
System.out.println(“a=” + a);
System.out.println(“b=” + b);
}
public static void change(int a, int b){//方法中指定的多个参数称为形式参数
a=a+b;
b=b+a;
}
} 结果还是为5 10
传入值是引用数据类型:
public class ArgumentsDemo02 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
change(arr);// 调用方法时,传入的数值称为实际参数

	for (int i = 0; i < arr.length; i++) {
		System.out.println(arr[i]);
	}
}
public static void change(int[] arr) {// 方法中指定的多个参数称为形式参数
	for (int i = 0; i < arr.length; i++) {
		arr[i] *= 2;
	}
}

}

当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响

十、String字符串

比较:
public boolean equals (Object anObject) :将此字符串与指定对象比较。
public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
获取:
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
转换:
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。
分割:
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。

十一、Arrays

public static String toString(数组) :返回指定数组内容字符串表示式
public static void sort(数组) :对指定的int型数组按数字升序进行排序

十二、ArrayList集合

JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合。ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
格式:
导包:import java.util.ArrayList;
创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:
ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();
“<要存储元素的数据类型>”中的数据类型必须是引用数据类型,不能是基本数据类型;
下面给出8种基本数据类型所对应的引用数据类型表示形式:
基本数据类型 对应的引用数据类型表示形式
byte Byte
short Short
Int Integer
long Long
float Float
double Double
char Character
boolean Boolean
方法的使用:
import java.util.ArrayList;
public class ArrayListDemo01 {
public static void main(String[] args) {
// 创建ArrayList集合
ArrayList list = new ArrayList();
// 向集合中添加元素
list.add(“stu1”);
list.add(“stu2”);
list.add(“stu3”);
list.add(“stu4”);
// 获取集合中元素的个数
System.out.println(“集合的长度:” + list.size());
// 取出并打印指定位置的元素
System.out.println(“第1个元素是:” + list.get(0));
System.out.println(“第2个元素是:” + list.get(1));
System.out.println(“第3个元素是:” + list.get(2));
System.out.println(“第4个元素是:” + list.get(3));
}
}
第九讲:
创建类:
class Person {
// 私有成员变量
private int age;
private String name;

// 对外提供设置成员变量的方法
public void setAge(int a) {
		if (a < 0 || a > 130) {
		System.out.println(a + "不符合年龄的数据范围");
		return;
	}
	age = a; 
}

// 对外提供访问成员变量的方法
public void getAge() {
	return age;
}

}
总结:

封装总结:
类中不需要对外提供的内容都私有化,包括属性和方法。
以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。
注意:私有仅仅是封装的体现形式而已。
第十讲:继承
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。
格式:
class 子类 extends 父类 {}
在类的继承中,需要注意一些问题,具体如下:
1、在Java中,类只支持单继承,不允许多继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。
class A{}
class B{}
class C extends A,B{} // C类不可以同时继承A类和B类
2、多个类可以继承一个父类,例如下面这种情况是允许的。
class A{}
class B extends A{}
class C extends A{} // 类B和类C都可以继承类A
3、在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C类继承自B类,而B类又可以去继承A类,这时,C类也可称作A类的子类。下面这种情况是允许的。
class A{}
class B extends A{} // 类B继承类A,类B是类A的子类
class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类
4、在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。例如上面的这种情况中,B类是A类的子类,同时又是C类的父类。
Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的
This.调用自己本类成员
Super.调用自己父类成员
成员方法特殊情况——覆盖
子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。
方法重写(覆盖)的应用:
在子类中,访问父类中的成员方法格式:
super.父类中的成员方法();
第十一讲:
定义格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
使用interface代替了原来的class,其他步骤与定义类相同:
接口中的方法均为公共访问的抽象方法public
接口中无法定义普通的成员变量(必须定义为常量)

第十二讲:
构造方法的格式:
修饰符 构造方法名(参数列表)
{
}
构造方法的体现:
构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。
构造方法名称必须和类保持一致。
构造方法没有具体的返回值。
构造方法的代码体现:
class Person {
// Person的成员属性age和name
private int age;
private String name;

// Person的构造方法,拥有参数列表
Person(int a, String nm) {
	// 接受到创建对象时传递进来的值,将值赋给成员属性
	age = a;
	name = nm;
}

}
第十三讲:
final修饰类不可以被继承,但是可以继承其他类。

第十六讲:
public static void function() throws Exception {
System.out.println(“请输入你的出生年月”)
String birthdayString = new Scanner(System.in).next();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date birthdayDate = sdf.parse(birthdayString);
Date todayDate = new Date(); //获取现在时刻毫秒
long birthdaySecond = birthdayDate.getTime();//获取毫秒值
long todaySecond = todayDate.getTime();
long secone = todaySecond-birthdaySecond;
if(secone < 0){
System.out.println(“我还没出生”);
}
else{
System.out.println(secone/1000/60/60/24);
}
}
}
第十七讲:
parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException
System.out.println(Integer.parseInt(“123”) + 2);
//打印结果为 125

将基本数值转成字符串有3种方式:
基本类型直接与"“相连接即可;34+”"
调用String的valueOf方法;String.valueOf(34) ;
调用包装类中的toString方法;Integer.toString(34)
1.1基本类型和对象转换
使用int类型与Integer对象转换进行演示,其他基本类型转换方式相同。
基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数
Integer ii = new Integer(“4”);//构造函数中可以传递一个数字字符串

Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
Integer iiii = Integer.valueOf(“4”);//使用包装类中的valueOf方法

包装对象---->基本数值

3.相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。
自动拆箱:对象转成基本数值
自动装箱:基本数值转成对象
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。

自动装箱(byte常量池)细节的演示
当数值在byte范围之内时,进行自动装箱,不会新创建对象空间而是使用原来已有的空间。
Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true

System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空间。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true

Java中三种长度表现形式:

数组.length() 属性,返回值int
字符串.length() 属性,返回值int
集合.size() 方法,返回值int

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值