Q1:Java中所有的成员变量和局部变量都会被默认初始化吗?
Answer:不是。成员变量可以不用初始化,但是局部变量一定要初始化or赋值。
为什么?Java本身设定。
内部如何处理?在新建一个对象时,Java会在Heap中申请内存区域存放类的数据。而成员变量就是类的数据。只需要在JVM申请内存时将整块区域置0。
注:Heap是数据结构中的堆。
*
而对于方法的局部变量,是在线程的Stack中,虽然Stack可以帮忙初始化但是对于一些局部变量,在方法的一开始是没有的,有些循环中的局部变量是要反复声明多次的。有些局部变量作用域结束后,另一个局部变量又会取代它位置。
*
注2:Stack是数据结构中的栈。
①stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。
②stack的第二种含义是"调用栈"(call stack),表示函数或子例程像堆积木一样存放,以实现层层调用。
③stack的第三种含义是存放数据的一种内存区域。程序运行的时候,需要内存空间存放数据。一般来说,系统会划分出两种不同的内存空间:一种叫做stack(栈),另一种叫做heap(堆)。
它们的主要区别是:
stack是有结构的,每个区块按照一定次序存放,可以明确知道每个区块的大小;heap是没有结构的,数据可以任意存放。因此,stack的寻址速度要快于heap。
其他的区别还有,一般来说,每个线程分配一个stack,每个进程分配一个heap,也就是说,stack是线程独占的,heap是线程共用的。此外,stack创建的时候,大小是确定的,数据超过这个大小,就发生stack overflow错误,而heap的大小是不确定的,需要的话可以不断增加。
根据上面这些区别,数据存放的规则是:只要是局部的、占用空间确定的数据,一般都存放在stack里面,否则就放在heap里面**
Q2:多行注释的语法结构?
**
Learning**
1.类体——成员变量:实例变量/静态变量(类变量)
class Member {
int x = 11; //实例变量
static int y = 28; //静态变量,在其他类中可用Member.y使用
}
2.方法体——局部变量
当方法被调用,JVM为局部变量分配内存空间,调用结束释放空间,销毁变量。
局部变量名&&声明变量名可以一致,此时声明变量无效
3.运算符
赋值:"="
算数:"+","-","*","/","%"
自增/减:"++","–"
比较:">","<","==",">=","<=","!="
逻辑:"&&","||","!"
**注:短路与非短路运算符
&和&&:&用来判断两个表达式,第一个表达式为false则不用判断第二个,直接输出结果以减少计算机判断次数。——从左端的表达式判断整个的值(短路)如&&
始终执行逻辑运算符两边表达式。(非短路)如& **
位:"&","|","~","^",">>","<<",">>>"
**左移:补0 右移:最高位为0右移补0,为1右移补1 **
三元:条件式?值1:值2(若值为true取值1,否则值2)
4.类型转换:隐式&显式 (byte<short<int<long<f<d )
①从低级向高级转换自动执行——隐式转换
package Fristprogram;
public class Conver {
public static void main(String[] args) {
// TODO 自动生成的方法存根
byte mybyte = 123;
int myint = 150;
float myfloat = 452.12f;
char mychar = 10;
double mydouble = 45.46546;
System.out.println("BYTE&&FLOAT:"+(mybyte+myfloat));
System.out.println("BYTE&&INT:"+(mybyte*myint));
System.out.println("BYTE&&CHAR:"+(mybyte/mychar));
System.out.println("DOUBLE&&CHAR:"+(mydouble+mychar));
}
}
②从高低向低级——显式转换(强制类型转换)
(类型名)要转换的值
5.代码注释(可嵌套)
①单行"//"
②多行"/* /"
③文档/* */
6.流程控制
①复合语句(块语句)
②条件语句
If:if(布尔表达式){ 语句 }
if-else:if(布尔表达式){语句1} else{语句2}
if-else if-…-else:if(布尔表达式){语句1} else if{语句二}…else{ final parse}
switch:首先计算表达式值,若表达式值与某case对应值一致,则执行。
switch(表达式){
case 常量值 1:语句块;break;
case 常量值 2:语句块;break;
...
default: 语句块n+1;break;
}
表达式为整型、字符型或者字符串类型!
③循环语句
1)while(条件判断语句):while(条件表达式){执行语句}
package Fristprogram;
public class GetSum{
public static void main(String[] args) {
// TODO 自动生成的方法存根
int x=1;
int sum=0;
while(x<=10) {
sum=sum+x;
x++;
}
System.out.println("sum="+sum);
}
}
2)do…while:do{ 执行语句 }while(条件表达式)
package Fristprogram;
public class Circulate2 {
public static void main(String[] args) {
int a=100;
while(a==60) {
System.out.println("ok1");
a--;
}
int b=100;
do {
System.out.println("ok2");
b--;
}while(b==60);
}
}
3)for:for(表达式1;表达式2;表达式3){语句序列}
package Fristprogram;
public class Circulate1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n=100;
int sum=0;
for(int i=2;i<=100;i++) {
if(i%2==0)
sum=sum+i;
}
System.out.println("2~100所有偶数之和为:"+sum);
}
}
注:无限循环 for(;?{…}
4)foreach:for(元素变量 x:遍历对象 obj){ 引用了x的java语言;}——for的特殊简化版本(用于遍历数组)
package Fristprogram;
public class ergodic {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[]= {1,1,2,8};
System.out.println("数组中元素为:");
for(int j:a) { //foreach语句,int j引用的变量,a指定要遍历数组,输出j
System.out.println(j);
}
}
}
Praticing
1.Java程序:将两数相加结果输出。
package Fristprogram;
public class Pratice1 {
public static void main(String[] args) {
int a=1;
int b=2;
System.out.println("result="+(a+b));
}
}
2.Java程序:声明成员变量age,局部变量name。比较两者区别,并添加注释。
package Fristprogram;
public class Pratice2 {
static int age = 18; //声明类变量age
public static void test(){
String name = "Jane"; //声明局部变量
}
public static void main(String[] args) { //主方法
age =23;
String name2 = "Jackson";
System.out.println(name2+"年龄是:"+age);
//System.out.println(name+"年龄是:"+age); name是其他方法体的局部变量不可引用
}
}
3.Java程序:将所有整型数值转换成int型,并输出。
package Fristprogram;
public class Pratice3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
byte a = 122;
int b = 333;
short c = 4556;
long d =555556677;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println((int)a);
System.out.println((int)b);
System.out.println((int)c);
System.out.println((int)d);
}
}
不可超过int取值范围
4.Java程序:实现判断变量x是奇数还是偶数。
package Pratices;
public class Pratice4 {
public static void main(String[] args) {
int x=6;
if(x%2==0){
System.out.println("x是偶数");
}else System.out.println("x是奇数");
}
}
5.Java程序:应用for语句打印菱形。(注:不理解)
package Pratices;
public class Pratice5 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for(int i1=1;i1<5;i1++) {
for(int e1=4;e1>i1;e1--)
System.out.print(" ");
for(int s1=0;s1<2*i1;s1++)
System.out.print("x");
System.out.println();
}
for(int i2=1;i2<5;i2++) {
for(int e2=0;e2<i2;e2++)
System.out.print(" ");
for(int s2=10;s2>2*i2;s2--)
System.out.print("x");
System.out.println();
}
}}
6.Java程序:使用while语句计算1+1/2!+1/3!+…+1/20!之和。
package Pratices;
public class Pratice6 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
double sum=0;
double i=1;
double j=1;
while(i<=20)
{
j=j*i;
sum=1/j+sum;
i++;
}
System.out.println(sum);
}
}