数组长度和字符串长度
数组长度调用的是数组的length属性;
而字符串长度调用的是length() 方法;
自动类型转换
容量大向容量小的转换,使用强制类型转换;
浮点数向整数转换,直接舍去小数位而不是四舍五入
类变量、局部变量与实例变量
public class Variable{
static int a=0; //类变量
String str ="Hi"; //实例变量
public void method(){
int b=1; //局部变量
}
}
- 局部变量没有默认值,声明后必须初始化或赋值才能使用。
- 局部变量是再方法栈上分配的,静态变量是在方法区(也叫元空间)里。
- ps:一个线程一个栈,共享堆和方法区。
继承规则
- 非private都可以被继承
- 子类的访问控制修饰符权限必须高于父类
java修饰符
- 访问控制修饰符
- defalt:同一包内可见
- private:同一类内可见
- public:对所有类可见
- protected:同一包内的类和所有子类内可见
- 非访问修饰符
- static
- final
- abstract
- synchronized
访问控制修饰符
对于Protected,所谓同一包内的类和所有子类内可见:
- 子类与基类在同一包中:被protected声明的都可被访问,无论是类内还是实例。
- 子类与基类不在同一包中:那么子类可以在类中访问继承过来的被Protected声明的,如果子类的包创建基类对象,不能访问基类对象的protected声明,因为在不同包中,且不在子类内。
package a;
public class A {
protected void get(){
System.out.println("this is xx");
}
}
package b;
import a.A;
public class B extends A {
public static void main(String[] args) {
A a=new A();
a.get(); //错误,在不同包中且不在子类中。
B b=new B();
b.get(); //正确,因为在同一包中
}
}
这里的错误属于编译阶段错误,代码有两个阶段,一个是编译阶段,一个是执行阶段
虽然实际对象a有get()方法,但是在编译阶段这里不符合规则,不能通过编译,也就无法执行。
非访问控制修饰符
- static:静态修饰符
- 静态变量:类变量,无论实例化多少对象,静态变量只有一份拷贝,存在方法区(元空间)中
- 静态方法:不能使用类的非静态变量,也不能调用非静态方法
- 静态代码块:代码块在在类加载的时候就执行
public class A{
static{
……
静态代码块
}
}
public static void main(String[] args){
class.forName((new A()).class);//加载类就可以执行静态代码块中的内容
}
static常和final一起定义常量:public static final int a=10
,一起使用的好处是当创建类的多个对象时,只有一份常量的拷贝,节省内存空间。
- abstract:抽象修饰符
- 用abstract修饰抽象类,抽象方法。
- 任何继承了抽象类的子类必须实现父类的所有抽象方法,除非该子类也声明成抽象类。
逻辑运算符的短路性
假设a=2,b=3。if(++a==2&&++b==3)
,结果应该是a=3,b=3。在判断++b==2为假后就不会执行++b的操作再做判读。
instanceof运算符
用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)
变量名 instanceof 类型
例:boolean result="name" instanceof String
循环
for、while、do……while、for……each