持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
有趣的for循环
请说说这段代码执行结果是什么?
public static void main(String[] args){
int x=1;
for(System.out.print('a');x<=5;System.out.print('b')){
System.out.print('c');
x++;
}
}
我们都知道普通for循环里面是 for(int i=0;i<xx,i++){循环体} 这样一个类似的语句。那么本题有趣之处在哪里呢?
在普通里面,初始条件变成了输出“a”。可是在循环之前我们已经定义了x。 在初始值变化的的地方:变成了输出b。但是在循环体内,我们定义了初始值变化。
所以我们的for有用的是 x=1; for(;i<=5;) x++
所以第一次循环,x=1,先输出a,然后判断条件,满足条件,输出c,然后再是输出b
解析:循环for内只有中间要求是Boolean类型的,左右怎么写没有要求 x=1-》循环-》输出a,x<=5->输出c,x++,输出b x=2-》循环-》x《=5-》输出c,x++,->输出b
所以答案:a,cb,cb,cb,cb,cb
同理:这样的题也类似
public static boolean fun(char r){
System.out.println(r);
return true;
}
public static void mian(String[] args){
int x=1;
for(fun('a');fun('b')&& x<=5;fun('c')){
fun('d');x++
}
}
答案: a bdc x=2 bdc 3 bdc 4 bdc 5 bdc 6
下面代码编译能否通过?
public class Test{
int a=1;
int b=2;
pubic static void main(String[] args){
static String c="3";
System.out.println(a+b+c);
}
}
public class Test{
sattic int a=1;
static int b=2;
public sattic void main(String[] args){
String c="3";
System.out.println(a+b+c);
}
}
上一段出错:静态变量不能修饰局部变量
下一段33. 1+2+“3”
上一段解析:关键是弄清楚静态变量
静态:特征修饰符,只能修饰类成员,不能修饰局部变量:
修饰后特点:
- 加载在类加载时候初始化
- 存在一个专门静态元素空间,普通对象不一样;
- 有且只有一份,全部类对象,及类本身共享;
- 静态元素出现和对象空间无关,类名直接访问;
- 静态元素不能直接访问非静态;
- 静态元素不能出现this或者super
问:static修饰类成员,比如属性方法,如果里面还有一个内部类,可以使用static吗?
“static可以修饰内部类 static可以修饰内部类(因为内部类可以看作是类成员)
下一段就是字符串拼接问题
下面xyz存储在内存什么地方
public class Test{
private String x="x";
public void method(){
String y="y";
final String z="z";
}
}
全部代码在硬盘上,通过javac变成字节码文件(硬盘)-》jvm虚拟机进行运行。栈堆方法区等五个。 类自动加载到内存,产生类模板(类信息,属性方法) 所以需要创建对象,new Test(),所以x和方法在堆空间里面。 方法需要调用,就会在栈开辟空间,yz在方法内,所以在栈
你知道创建对象有哪几种方式吗?
可能大家只会想到new,然后就没了。其实创建对象有多种方式。
-
new申请对象空间 new本身就是申请空间,空间申请后放东西叫对象加载,加载完成,执行构造方法,告诉你成功了
-
反射: class 类里面有一个newInstance()方法:先获取当前类运行实例,然后再newinstance,不安全
jdk8后通过Contructor类中newInstance 找到构造方法new,没找到报异常
-
通过Object类中的clone方法 原型模式:
-
通过对象的反序列化。(IO)把完整对象拆分成有序的字节序列过程叫序列化。反过来,读取字节序列,复原对象就叫反序列化