目录
一、变量
二、运算
三、判断和循环语句
四、数组
五、方法
六、类
七、字符串
八、static
九、继承
十、多态
十一、包
十二、final
十三、抽象类
十四、接口
十五、嵌套类
一、变量
1、byte范围【-128,127】
2、long变量后面要写l,float变量定义要加f。如float app=1.2f;
3、true和false都是小写
4、java区分双引号和单引号,单引号只存一个字,双引号可以存若干
5、String要大写,可以正常定义,也可以String a=new String("华为");
二、运算
1、byte、short、char进行运算时会提升到int类型。
2、字符串和数字(或字符类型)相加会进行concat,注意从左到右进行运算。例如用来实现输出“我的年龄是18岁”可以使用System.out.println("我的年龄是"+age+"岁");
3、字符(char类型)加数字等于字符转ascii码加数字的int类型。
4、有自增++,有++a和a++,也有+=
5、& ,| ,^ ,!,不能用and or,&&和||有短路效果,如果第一个可以判断不需要看第二个。
三、判断和循环语句
和C++一模一样,单行语句case可以将冒号换成->。即case 1->System.out.println(1);
字符串相比较时使用equal函数。if (sure.equals("y")){}
四、数组
int []array=new int[]{1,2,3};或者int array[] =new int[]{1,2,3}或者int []array={1,2,3};
打印数组值也是array[0]这种,输出array是地址值
栈(方法区使用)和堆(数组new)
打印数组长度时使用array.length
五、方法
public static 返回类型 方法名(输入类型 形参 .....)
可以进行重载:在同一个类下方法名相同,形参不同(包括形参个数和形参类型),不考虑返回值。
数组形参为int array[]。
六、类
和类基本上一样,存在private和public对于变量、函数、类的限制。
当前类 | 同一package | 子孙类 | 其他package | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认(空着不写) | √ | √ | × | × |
private | √ | × | × | × |
this还是指向类内变量,而不是函数中的形参。比如类中某一个函数中调用this.age,将返回类中的变量age。
默认构造函数和带参构造函数与c++一致,Student s1=new Student(){}或Student s1=new Student(){age,sex}。
类内变量一般是private的,函数可以按自己需求public或者其他。
七、字符串
1、String
String s1="abc";或者String s2=new String("abc");
s1.equals("s2"):(比较,考虑大小写)
s2.equalsIgnoreCase("s1"):(比较,不考虑大小写)
s1.charAt(0) :返回s1的第0个索引,可用于循环打印字符
s1.substring(start,end),左闭右开输入子集,类方法
s1.replace(old,new) 替换字符串中的旧值和新值
2、StringBuilding
StringBuilder sb=new StringBuilder("张三"); 建立可变字符串
sb.append("是坏人"); 添加字符串
sb.reverse() ; 翻转字符串
sb.length() ; 输出长度
sb.capacity(); 输出sb的容量,字节数
sb.tostring(); 返回String类的字符串,而不是原先的StringBuilder类
正向从String变StringBuilder类就使用第一行就可以,替换为变量
3、StringJoiner
StringJoiner sj=new StringJoiner(delimiter,prefix,suffix)
StringJoiner不能直接初始化变量,只能进行定义,然后在进行循环add时可以自动添加首尾符号和每次执行add后自动添加的间隔符。
sj.add("abc"); 添加字符串,但添加完abc后会自动调用原来定义时的间隔符,最末则会添加尾符。
sj.length() 返回长度
sj.tostring() 转换为String类。
4、ArrayList
ArrayList<String>list1=new ArrayList<>(); 空ArrayList类,是一个python列表形式[]
下面这个就是模板<>中的类型。
八、static
类内static方法和变量,可以直接通过类名调用,不需要实例化,可以作为工具类
静态代码块static{}
用于静态代码工具,一般是用于初始化,只能执行一次
九、继承
多层继承,会从基类中非private,非final,非static的方法建立虚方法表给子类,最后给到最高层子类,最高层子类会先查询虚方法表中寻找建立在父类的方法,而不会通过多层继承找到父类的方法。
继承遵循就近原则。
super问题:
super可以在类中调用上一层的变量或者方法,this是调用本层的变量和方法。当重写父类方法时,需要在上一行添加@override,负责检验。
十、多态
看下图,对于调用成员变量和调用成员方法的区别,在多态情况下变量看父类,方法看子类。
这种父类变量new子类对象的方法,不能调用子类特有方法(可以调用子类重载父类的方法)。可以通过下面的强制转换方式来实现调用子类特有方法。
假设动物类中有猫和狗两个类,猫和狗都有特殊的方法,猫捉耗子,狗看家。
Animal a=new dog(); //前面明确a用dog类型或者cat类型都可以if (a instanceof Dog d) //通过这一串判断无论a是dog或是cat都可以使用特有方法d.lookhome()
else if(a instance of Cat c)c.catchmouse()
elseSystem.out.println("没有该类型不能转换")
十一、包
十二、final
类似与const
final修饰也不是都不能改变,对于类外对象和数组是相同的,如下。
十三、抽象类
十四、接口
注意接口中写抽象类这个点,也就是说类没有大括号和大括号中的内容
以上为jdk7的用法。
jdk8添加了接口中的方法体default和static,默认的为default修饰,后面的继承子类不需要去重载,若重载则接口中的default修饰的方法需要变为抽象方法。另外可以用static定义静态方法。
jdk9添加了接口中的私有方法,可以用接口中的默认方法或静态方法来调用该私有方法。私有方法分为私有方法private(默认方法default调用)和私有静态方法private static(静态方法static调用)
十五、嵌套类
一般内部类
内部类可以使用外部类的包括私有属性,而外部类要访问内部类需要创建对象,不能访问内部类私有属性。
定义方法:Outer.Inner oi=new Outer().new Inner();
内部类调用外部的变量不能用super,super使用于父类,调用方法:Outer.this.name;
内部类调用自己的属性使用this.name;
调用内部类方法时必须创建对象
静态内部类
静态内部类定义变量时,Outer.Inner oi=new Outer.Inner();
调用静态内部类时不用创建对象,可以用类名来进行指定
匿名内部类