Java学习日记——Stack和Heap、注释、运算符、类型转换、流程控制 20190227

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);
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值