//如果等号右边是两个常量在相加,程序内部会优化为一个常量再赋值
byte num04 = 10 + 20;// JVM中的一种优化(全部是常量才会触发) 相当于byte num04 = 30;
//byte num05 = 10 + num01 + 20;// 错误: 不兼容的类型: 从int转换到byte可能会有损失
——————————————————————————————————————————————————————————
int score =100;//作用域是main方法,以下代码块都不得定义重复变量
{
//int score =120;// 已在方法 main(String[])中定义了变量 score 再定义就报错
}
——————————————————————————————————————————————————————————
4.复合赋值运算符其中隐含了一个强制类型转换
int num01 = 3;byte num02 = 5;
num02+=num01;//int 等价于 num02 =num02 + num01;
System.out.println(num02);
//num02 =num02 + num01;报错
System.out.println(num02);//不兼容的类型:从int转换到byte可能会有损失
——————————————————————————————————————————————————————————
数组的三种创建方式(int 型数组为例)
一、=new int[4];------动态初始化
二、=new int[]{1,2,3,4};------静态初始化
三、={1,2,3,4};------静态初始化
——————————————————————————————————————————————————————————
变量只有被初始化才能够投入使用,只不过局部变量需要手动初始化(显式初始化),成员变量或数组内的元素都有自己的默认初始化机制(隐式初始化)
——————————————————————————————————————————————————————————
当方法的返回值类型为void的时候,这种方法只能单独调用,不能进行打印调用或者是赋值调用。
如:int a = add(3,4); System.out.print( add(3,4));
public void add(int a,int b){
//方法体
}
——————————————————————————————————————————————————————————
int c = 5;
c = c-- + c++ //结果为9
9 = 5 + 4
——————————————————————————————————————————————————————————
JavaBean中重载构造器必须添加一个空参构造器,为了子类构造器可以隐式调用(众多子类构造器中必有一个加载super(),虽然我们无法直观的看见;这是子类继承父类的实现方式)
——————————————————————————————————————————————————————————
return关键字可以终止for循环吗?为什么?
可以
原因:1.终止当前正在执行的方法,for循环一般定义在方法内
2.可以返回方法的返回值,return语句声明在for循环结构内可以返回for循环结构之外的数据值,当方法声明格式为无返回值时,也可以使用return关键字,此时return后不能跟具体的返回值。当程序加载到return语句时,不管return语句是否在for循环结构中,都会结束当前正在执行的方法,即结束方法内的for循环语句。
建议:return结束for循环比较强硬,建议使用跳转语句 break或continue
——————————————————————————————————————————————————————————
数组的长度可以改变吗?
数组的长度可以改变:
情况一:在程序的编译期间,数组的长度可以更改
情况二:在程序的运行期间,数组的长度不可以更改。具有定长特性,一旦在内存中开辟空间,数组的长度就可以确定了。
——————————————————————————————————————————————————————————
this关键字遵循就近原则,它可以调用父类的属性,如果在子类中未找到目标属性,才会到父类中去找
——————————————————————————————————————————————————————————
String中的equals()方法重写了Object中的equals()方法
1. 若当前对象和比较的对象是同一个对象,即return true。也就是Object中的equals方法。
2. 2.1若当前传入的对象是String类型,则比较两个字符串的长度,即value.length的长度。
①若长度不相同,则return false
②若长度相同,则按照数组value中的每一位进行比较,不同,则返回false。若每一位都相同,则返回true。
2.2若当前传入的对象不是String类型,则直接返回false
——————————————————————————————————————————————————————————
get、set方法体内可以定义数据访问规范,从而防止数据被随意篡改访问
例如:public void setAge(int age){
if(age<=0){
this.age = 0;
}else{
this.age = age;
}
}
——————————————————————————————————————————————————————————
public class Man{
private String name;//存在堆中
//两个name为什么没有提示重复声明???
public void setName(String name){//存在栈中 两个name不在同一个内存区域,无法互相影响
this.name = name;
}
}
——————————————————————————————————————————————————————————
Java集合不能存放基本数据类型
Java集合不能存放基本数据类型,只能存放对象的引用
可以通过包装类,把基本数据类型转化为对象类型,存放引用
——————————————————————————————————————————————————————————
String str1 = "abc";//"abc"对象被创建出来,而且该对象只会创建一次,此时str1与str2可以共享同一个"abc"对象
String str2 = "abc";//存放在字符串常量池中
String str3 = new String("abc");//存放在堆内存中
String str4 = new String("abc");//创建新的对象
——————————————————————————————————————————————————————————
类的构造器不仅可以初始化类中属性,也可以通过操作类变量来统计对象数量
——————————————————————————————————————————————————————————
接口中的静态方法可以通过 接口.方法名()调用
——————————————————————————————————————————————————————————
接口中可以定义的内容
JDK1.7
常量
抽象方法
JDK1.8
默认方法
静态方法
JDK1.9
私有方法
——————————————————————————————————————————————————————————
抽象类可以定义成员变量、成员方法、抽象方法
接口不可以定义成员变量
——————————————————————————————————————————————————————————
接口中,有多个默认方法时,实现类都可以继承使用,如果【默认方法】有重名的,必须重写一次.************【接口冲突】
关于父类和接口中【抽象方法】重名问题,由于抽象方法没有方法体,没有实际意义,对程序没有影响,子类重写一次即可
【静态方法】出现重名,由于只能由类名/接口名直接调用,子类无法调用,对子类无任何影响
当一个类,即继承了一个父类,又同时实现了多个接口,父类中的【成员方法】与接口中的【默认方法】重名时. 子类就近选择执行父类的成员方法***********【类优先原则】
——————————————————————————————————————————————————————————
子类调用从父类继承来的属性(自己的属性) 通过this调用
调用父类属性 通过super
——————————————————————————————————————————————————————————
将属性设置为静态,可方便操作类间通信
当集合做属性时,如果不new 极有可能空指针异常,因为在创建对象的时候,构造器会初始化集合为null
也可以在构造器中创建集合对象