运算符 | 结合性 |
---|---|
[ ] . ( ) (方法调用) | 从左向右 |
! ~ ++(自加) --(自减) +(正) -(负) | 从右向左 |
* / % | 从左向右 |
+(加) -(减) | 从左向右 |
<< >> >>>(移位) | 从左向右 |
< <= > >= (比较运算符) instanceof | 从左向右 |
== != (赋值运算符) | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?:(三目运算符) | 从右向左 |
= | 从右向左 |
位(bit):即一个二进制位,是计算机中最小的信息单位
字节(Byte):即八个相邻的二进制位,简称为B。字节是衡量信息量大小、信息存储的基本单位,最小单位,常用的还有KB(千字节)、MB(兆字节)、GB(吉字节)等,其换算关系为:
1KB = 1024B 1MB = 1024KB = 1024*1024B
1GB = 1024MB = 1024*1024KB = 1024*1024*1024B
计算机中最小的存储单元 : 位 bit - > 比特位 b
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB …
a&&b
-> 如果a为false,则b不执行
短路或 ||
a||b
-> 如果a为true,则b不执行
- 对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
- 对于引用类型的参数,形式参数的改变,影响实际参数的值
通过方法传递引用类型的值
如果方法改变了传过来的引用类型的值,有影响.
import java.util.Arrays;
public class MethodTran {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
changeArrValue(arr);
System.out.println(Arrays.toString(arr));
}
public static void changeArrValue(int[] arr) {
arr[0] = 0;
arr[1] = 0;
arr[2] = 0;
}
}
如果方法改变了传过来的引用类型的地址值,没有影响. (具体看代码)
public class TestCSDN {
public static void main(String[] args) {
int[] arr = new int[0];
int[] tranArr = tranValue(arr);
int[] arrCy = arr;
System.out.println(Arrays.toString(tranArr));
System.out.println(Arrays.toString(arrCy));
}
private static int[] tranValue(int[] arr) {
arr = new int[3];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
return arr;
}
}
上面的输出是否都是 [0, 1, 2] 呢? 可是并不是.
输出:
父亲(类)相同
姓氏(方法)相同
名字(参数)不同
参数不同的区分方式 :
- 参数的数量不同,例如method(int)和method(int, int)
- 参数的类型不同,例如method(int)和method(String)
- 参数的顺序不同,例如method(int, String)和method(String, int)
注意,参数的顺序不同的前提必须是顺序不同的几个参数类型不能一样
例如如果是method(int, int)的话,那么不管怎么改变顺序都无法进行区分的
方法重载与返回值类型没有关系
重写时满足的条件
new进堆,左进栈
进入
堆内存
, 会开辟一个空间,拥有默认值
而栈内存
中不会. 局部变量使用之前需要初始化
- 成员变量(在类中方法之外的变量) : 作用于整个类中. 在
堆内存
- 成员变量随着对象的创建而创建,随着对象的消失而消失- 局部变量(方法中或形式参数) : 作用于方法中. 在
栈内存
- 局部变量随着方法的调用而创建,随着方法的调用完毕而消失
Note :
若成员变量
与局部变量
同名的话,那么将会屏蔽成员变量的值.因此局部变量在命名时尽量不要与成员变量同名!
对于字符串拼接,首先想要+
进行连接,可是会消耗大量内存,速度很慢,因此推荐StringBuilder
由上图可知,字符串拼接原来的字符串并不会消失,而是如果常量池中不存在的话,将会重新开辟一块内存空间来存储新的字符串,以及拼接后的字符串.
而StringBuilder
在每次调用append()方法时,都是同一个对象,故和字符串+
拼接相比,大大节省了时间!故推荐StringBuilder类
进行字符串拼接的操作.
对于上图可以这样理解(源自 : java作用域public ,private ,protected 及不写时的区别)
- public : 不论是否是同一个包或者是否为继承关系,都可以访问.
- private : 除了当前类以外其他都不可以使用
上面两个好记,另外两个可以这样想, 首先需要明确的是
- 默认(即不写修饰符) : 理解为friendly(友好的).所以除了自身可以访问外, 就是朋友也可以(即同一个包下)
- protected : 保护的意思, 除了自身保护外, 朋友家人都可以保护你,所以自己可以访问,同一个包(朋友),拥有继承关系的子类也可以访问(家人).
总结
1)仅对本类可见—private
2)对所有类可见—public
3)对本包和所有子类可见—protected
4)对本包可见—默认(不需要修饰符)
- 定义为private,只能被本类的方法调用;
- 定义为static,则强调只有一份,且只被执行一次;
- 定义为final,则说明它是一个常量,无法被修改
final类不能被继承,没有子类,final类中的方法默认是final的,不包括成员变量.
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
显示参数:方法中的形式参数
隐式参数:类的方法中调用了类的实例域。比如this,调用该方法的对象或者正在初始化的对象是隐式参数; 或者super。
public class People{
private String name;
private int age;
public People() {}
public People(String name, int age) {
this.name = name; // this为正在初始化的对象
this.age = age;
}
public void setName(String name) {
this.name = name; // this为调用该方法的对象
}
}
next()与nextLine()方法的区别
==与equals()方法的区别
数值类型的转换与强制转换
数组在内存中的存储过程
格式化输出
break,continue,return,System.exit(0)
java中\r,\n,\r\n,\n\r的区别
初始化块、静态代码块、构造函数的运行顺序
参数数量可变的方法 - Java
关于 Java 的静态工厂方法,看这一篇就够了!
三目运算符
如果感觉本文对您有帮助,希望可以点赞支持一下作者.当然我也会继续写一些有用的东西,可以关注我持续看后面内容.感谢支持.
细微动作,如蔷薇般芬芳