个人学习笔记有错请指正
父抽象类被子类继承,并且子类可以重写父类方法。
静态变量指的是被static修饰的类的变量;静态变量被所有类实例对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化。
当try遇到异常会跳转到catch,finally无论如何都会执行,如果try或者catch中都有return语句,会在执行return之前执行finally;无论有没有异常,程序之后的代码都会执行。
Java中equals和的区别
java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
在Java中用extends来创建一个子类
设计抽象类的原因是什么?有一部分类不应该被初始化;为什么有些类不应该被初始化?他们是一部分具体的相似的类的抽象没有办法具体化。
抽象类的唯一目标就是被继承,抽象类一定要被继承,方法一定要被覆盖。
抽象类的好处是什么?是多态,因为继承抽象类的子类可以重写或重载抽象类的方法。
在Java中用implements声明自己使用一个或多个接口
抽象类和接口一旦被继承或实现,其中所有方法也必须都要被实现。
接口相当于一个抽象方法,不能被继承,只能被实现。
接口的好处是什么?一个接口可以被多个类实现,一个类可以实现多个接口。
多种类可以实现,并重写一个接口的好处是什么?多态!!!!
接口中可以添加default方法,该方法不用被实现。
构造函数可以要求传入参数,例如初始化一个数组时需要传入数组的值
在构造函数中可以加一限制和检查,这是封装的好处
构造函数可以有很多个(类似重载),一定要声明一个无参的,这样用户如果在声明时没有传入参数,就按照默认的参数初始化。如果父类有构造函数,子类可以显示的调用,如果父类没有,子类可以不用操作,编译器默认调用父类的无参构造函数。
switch语句中,case标签可以是:1.char byte short int 的常量表达式;2.枚举常量;3.从Java7开始,case标签还可以是字符串字面量;
中断控制流程语句:1.goto时Java的保留字,但在Java中并未使用它;2.break:跳出本层循环;3.continue:超越了当前循环体的剩余部分,就立刻跳到下循环体的首部,进行下一次循环。
java.math中的BigInteger,BigDecimal这两个类可以处理任意长度序列的数值。
使用静态的valueOf方法可以将普通数值转换为大数值,例子BigInteger a = BigInteger.valueOf(100);
不能使用算术运算符去对大数进行运算,而是使用大数值类中的方法add,multiply,subtract,devide进行操作
import java.math.BigInteger; public class BigIntegers { public static void main(String[] args) { String num1 = "999999999999999999999999999999"; String num2 = "999999999999999999999999999998"; BigInteger big1 = new BigInteger(num1); BigInteger big2 = new BigInteger(num2); System.out.println("加法操作:" + big1.add(big2)); System.out.println("减法操作:" + big1.subtract(big2)); System.out.println("乘法操作:" + big1.multiply(big2)); BigInteger result[] = big1.divideAndRemainder(big2); System.out.println("相除后的商是:" + result[0]); System.out.println("相除后的余数是:" + result[1]); } }
大数不是Java的基本数据类型,而是类和对象
声明数组变量:int[] a;
使用new运算符创建数组:new int[0];
一旦创建数组,就不能去改变数组的大小,但是可以改变数组中每个元素的值。
int[] a = new int[1];
匿名数组:a = new int{1,2,3};
数组浅拷贝:将一个数组变量拷贝给另一个数组变量,这是两个变量将引用同一个数组(只是拷贝了引用,修改一个数组就等于对另一个数组做相同操作)。
数组深拷贝:使用Arrays类中的copyOf方法,将一个数组的所有值拷贝到另一个数组中,两个数组没有什么关系。
打印一维数组:利用Arrays类中toString方法
打印二维数组:利用Arrays类中的deeptoString方法
4种整型:byte short int long
2种浮点型:float double
1种字符型:char
1种真值型(布尔型):boolean
不要使用未初始化的变量
用final修饰的表示常量,final修饰基本类型和不可变类时,不会改变状态;final修饰可变类型时,只是不能改变对象的引用,但是可以改变对象的状态,
即可以调用对象的方法,改变对象对象的状态。
隐式转换:没有信息的丢失
显示转换:如强制类型转换,可能有信息的丢失
String类型是不可变的;
java中用双引号括起来的字符串如"abds",都是直接存储在方法区的字符串常量池当中的,双引号中内容相同的字符串只会在字符串常量池中保存一份;
为什么要把字符串存储在"字符串常量池"中?因为字符串在实际开发中使用太频繁,为了提高执行效率,所以把字符串放到了方法区的字符串常量池当中。