持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
权限修饰符
class Target{
punlic String name="hello"
}
问:哪个类可以直接修改name属性?
从题目可以看到,name是public修饰,是不是所有类都能访问?不是的
怎么访问name属性?需要target类,但是target类不是public修饰,而是没写,表示default。
所有target类只有当前包test才能访问
所有结果是:在test下任意包可以直接访问修改
开发中最常用的是 private public
| 权限修饰符的名称 | 当前类 | 同一个包下面其他类 | 不同包下面子类 | 不同包下面的其他类 |
|---|---|---|---|---|
| public | 可以 | 可以 | 可以 | 可以 |
| protected | 可以 | 可以 | 可以 | 不可以的 |
| 不写(默认) | 可以 | 可以 | 不可以 | 不可以 |
| private | 可以 | 不可以 | 不可以 | 不可以 |
在几进制下 123*234=28560是成立的?
考察进制底层逻辑:第一:尾数3*4=12,12怎么变成0?需要进位:可能是12进制,满12进位,可能是六进制,两个六(12)进位
假如:6进制:结果不可能有八(6以上的值)所有结果应该是12进制
如何在不产生更多变量情况下,交换两个元素值?
public static void main(String[] args){
int a=10;
int b=20;
//交换ab
// 可以有变量:
// int c=a;a=b;b=c;
//没有变量,但是可能越界
a=a+b;//30 a=30;b-20 和存入a,b不变
b=a-b;//30-20 a=30,b=20原来a存入b
a=a-b;// a=10;b=20 原来b存入a
// 最好位运算
a = a ^ b;//00001010 ^ 00010100=00011110
b = a ^ b;//00011110 ^ 00010100=00001010
a = a ^ b;//00011110 ^ 00001010=00010100
System.out.println(a);
System.out.println(b);
}
除0
public class Test{
public static void main(String[] arge){
System.out.println(5.0/0.0);
System.out.println(5.0/0);
System.out.println(5/0.0);
System.out.println(5/0);
}
}
当两个数都是整数时候,0不能作为除数:所有前三个正常输出,第四个运行时异常
前三输出:Infinity(无穷)
异常:运行时异常,编译异常(程序员可以处理)
错误:一般是内存问题,只能重启查找问题一般无法处理
字符串问题
public class Test{
public static void main(String[] r){
String a="zzt";
String b="zzt";
String c=a+b;
String d="zzt"+"zzt";
System.out.println(c==d);//false
System.out.println(c.equals(d));//true
}
}
a+b 底层是StringBuilder拼接,先放a在b,然后tostring 两个引用值相加,在栈里面
zzt+zzt 是明文,直接拼接在一起 两个字面量相加,结果在常量池
直接赋值字符串 创建的字符串对象,只会在常量池中 创建对象的时候,JVM会先去常量池中通过equals(key)方法,判断是否有相同的对象
如果有,则直接返回该对象在常量池中的引用; 如果没有,则会在常量池中创建一个新对象,再返回引用
new String(“abc”) 它保证字符串常量池和堆中都有这个对象,没有就创建,最后返回堆内存中的对象引用。