知识点排查(权当开发前的准备)
第二章 基本数据类型与数组
float 类型的常数要在末尾加上f,如:12.0f。
第三章 运算符、表达式和语句
整型数据在内存中以二进制的形式存储,其中,左面最高位是符号位,0表示正数,1表示负数,负数用补码表示。 补码:除符号位外,全部取反再加一,如一个int数据占四个字节,也就是32位,8 表示为00000000 00000000 00000000 00001000,-8则先将第一位取为1,再将剩余为取反,得11111111 11111111 11111111 11110111,再加一,得11111111 11111111 11111111 11111000 .swith 的表达式只能为byte,short,int,charfor-while 的工作流程: for(a;b;c){d} 运行a初始化,判断b,如果是true,则执行d,然后执行c,改变循环条件;如果是false,则结束循环。(abdc bdc bdc…)需要循环体先运行一次再开始while循环的,可以使用do{}while()for(声明循环变量:数组的名字){} 其中声明不可以在for 外提前完成
第四章 类与对象
类名首字母大写 驼峰习惯(如果类名由多个单词复合,则每个单词都大写,如:ChinaMade)成员变量的有效性与其在类体中的书写位置无关,建议写在最前面。局部变量的有效性与位置有关。局部变量与成员变量同名则隐藏成员变量。可以用this.xxx调用成员变量。成员变量有默认值,局部变量没有。(这个在声明变量时就会有区别,声明局部变量时需要赋值,成员变量则不需要)(boolean型默认值是false)变量和方法的名称,首单词首字母小写,如由多个单词复合,从第二个单词开始首字母大写,避免“1”,“l”。类体由变量声明与方法定义组成,对成员变量的操作只能放在方法中。如:声明成员变量时可以赋初始值,但是不能先声明再赋值。new 只能与类的构造方法进行运算,并返回一个十六进制的数,被称作对象的引用。new 运算符在计算出引用前,先给类中的成员变量分配了内存空间,并执行了构造方法,但此时对象并没有诞生,直到计算出引用的值时对象才诞生,这时的对象是一个匿名对象。(所以后期的gui那里,只需要new就行了,而不需要声明变量再把引用赋给他)类声明的变量叫做对象,分配给对象的变量被习惯地称作对象的实体, 空对象会导致空指针。设p1,p2是同一个类的两个对象,在进行了p1=p2的操作后,p1与p2具有相同的引用,他们本质上就一样了,即改变p1,也就会改变p2。java中的方法所有参数都是传值,即方法不会改变传入的参数本身。 其中,引用类型参数的传值相对比较绕人,简单来说,在7的基础上,如果p1指向了新的引用(p1又new了一个),不会影响p2(p2仍指向原来那个)。可变参数 public void f(int …x) 或public void g(double y,int …x) 其中x必须是可变参数中的最后一个参数,可以通过x[i]读取可变参数的每一项,x.length读取可变参数的长度。(这里的x就类似于一个可变长度的数组,也可以用for(声明变量:x)来循环 )入口地址是个啥?有关类的实例方法只被分配一次入口地址,还是不太明白避免重载出现歧义:我们都知道在重载时不同方法的参数必须不同,但尽管如此,有时也会出错,如:void f(double m,doule n)与void f(int m,int n) 尽管定义时参数不同,但在调用时容易发生歧义,如f(1,2)包名可以由若干标识符加"."分割而成。且如果使用了’.’,如:package tom.jiafei; 则存储文件的目录结构中必须包含如下结构:…\tom\jiafei,且字节码文件必须在这个jiafei里面。如果主类的包名是tom.jiafei,那么主类的字节码就一定在…\tom\jiafei,则必须到\tom\jiafei的上一层目录(假设为hhh)运行主类:C:\hhh> java tom.jiafei.主类名 (用了包名时,运行主类必须写全名,即加上包名)编译是javac 运行是Java 都需要在上一层(见12) 其中 “javac *.java”表示编译全部的源文件。(注意Java不需要用户程序用Java作为包名的第一部分)常用类:java.lang(所有的基本语言类,自动引入);javax.sing(抽象窗口工具集中的图形、文本、窗口gui类);java.io(所有的输入输出类);java.util(实用类);java.sql(数据库);java.net(网络功能);在编写类时,类中的实例方法总是可以操作该类中的实例变量和类变量;类方法总是可以操作该类中的类变量,与访问权限无关。不能用private和protected修饰类。基本数据类:Byte、Interger、Short、Long、Float、Double、Character。构建方法:XXX(xxx x),获得含有的数据:xxxValue() 如:Character的构建方法:Character(char c)获得数据:charValue()。其中,Character还有一些类方法,判断数字字符以及改变大小写等。JRE扩展与jar文件还有javadoc 好麻烦搭建流水线,a的构造方法中含有b的引用,b的构造方法中含有c的引用,再建立一个类,同时组合abc,则形成一个流水线。(p103)
第五章 子类与继承
有关protected:无论子类与父类是否在同一个包,子类都继承父类的protected 部分,但是,在通过“.”访问时,需要注意,如果用子类在子类本身中创建了一个对象,那么该对象总是能通过"."访问父类的protected部分,但如果是在另一个类中,如others类中用子类创建了一个对象,则此时,他调用子类继承的父类的protected部分时,要追溯到父类,也就是说,others类必须与追溯到的父类在同一个包中才能调用。如:
package No1;
public class A{
protected void show(){
System
.out
.println("protected 方法");
}
}
package No2
;
class B extends A{
B(){
show();
}
public class C{
public static void main(String
[] args
){
B b
=new B();
b
.show();
}
}
子类在创建对象时,父类的成员变量也全被分配了内存空间,但只将一部分(子类继承的那部分)作为分配给子类对象的变量,但剩下的并不是浪费内存空间,因为子类可以通过继承的方法来操作未继承的变量。instance of如果子类声明的成员变量或方法与从父类继承的重名的话,则被继承的会被隐藏,可以用super调用,同时,继承的方法操作的一定是继承的成员变量。 注意如果子类定义了一个与父类同名且参数一样但类型不同的方法时,就会 歧义,报错,重写方法的类型可以是父类方法类型的子类型。如果父类构造方法由参数,则子类的构造方法的第一行必须是用super调用父类构造方法。
第六章 接口与实现
接口内所有常量一定都是public static final;方法一定都是public abstract,且修饰符可以省略不写。而实现接口时也不要忘了加上public修饰符。如果父类实现了接口,子类自然也实现接口,不用再显性使用implements。
第七章 内部类与异常类
内部类的外嵌类的成员变量在内部类仍然有效,内部类的方法也可以调用外嵌类中的方法。内部类不可以声明类变量和类方法,外嵌类的类体中可以用内部类声明对象作为外嵌类成员。内部类仅供他的外嵌类使用,其他类不能用。内部类可以被修饰为static内部类,则程序就可以在其他类中使用该static内部类创建对象了,但此时的内部类不能操作外嵌类的实例成员变量。非内部类不能是static类。匿名类是一个子类,但没有类名,所以直接用父类的构造方法。匿名类不能可以访问外嵌类成员变量和方法,不可以声明static成员变量和方法。异常对象可以通过public String getMessage();public void printStackTrace();public String toString();获得或输出相关信息。断言一般用于程序不准备通过捕捉异常来处理的错误。语句:assert booleanExpression(必须是boolean型表达式) 或 assert booleanExpression:messageException(如果出错会输出的提示); 10.Java解释器默认关闭断言语句,使用-ea开启。
第八章 常用实用类
String类
1.有关内存 本来以为自己能说明白,结果发现是个大坑,上大佬链接
https://blog.csdn.net/qq_34490018/article/details/82110578?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
2.substring 复制 trim去掉前后空格