java变量和常量的内存分析_20160724------JAVA基本语法[标识符、数据类型、常量变量、内存分析]...

本文详细介绍了Java的基础语法,包括标识符的规则、数据类型的分类与转换,以及常量和变量的使用。特别强调了数据类型的范围、转换注意事项及内存管理中的堆栈区别。还通过代码示例展示了可能出现的编译错误和溢出问题,帮助读者理解Java编程中的关键概念。
摘要由CSDN通过智能技术生成

二、 基础语法

第一段程序:

public class HelloWorld{

public static void main(String[] args){

System.out.println(“Hello World!”);

}

}

1、标识符:

Java中凡是需要取名字的地方都叫做标识符。

标识符可以由字母、数字、下划线、和美元符号组成。

标识符的首字母不能是数字,且标识符是区分大小写的。

标识符不能包含空格,不能包含@#等特殊符号。

Java中定义的关键字、保留字不能作为标识符但可以包含如:class private static public void。

类名的每个单词的首字母大写:方法名、变量名第一个单词的首字母小写,其他单词的首字母大写。

2、数据类型

(1)基本数据类型:四类八种

602d9ff5b069

整型:

byte:8位,范围:-128(-27)~127(27-1),默认为0

【强制转换:byte number=(byte)128;】

short:16位,范围:-215~215-1;

int:32位,范围:-231~231-1

long:64位,范围:-263~263-1 数据后面需要加L.

字符型:

char

表示单个字母,字符敞亮必须使用单引号‘‘括起来,如:‘A’;

[字符串string不是基本数据类型,是引用数据类型]

浮点型:

float : float类型数据需要在后边加上f

double

602d9ff5b069

布尔型:

boolean(true /false)默认为false

(2)数据类型排序:

602d9ff5b069

(3)类型转换:

602d9ff5b069

自动数据类型转换:系统支持直接把某种数据类型的值直接赋给另外一种数据类型。

强制类型转换:如果要把上图右边的数据类型转换为左边数据类型,则需要强制类型转换。强制类型转换格式为:(数据类型)值。例如:(int)size

【强制类型转换应数以溢出,精度丢失(double转int,int转byte)】

//TestConvert

public class TestConvert {

public static void main(String arg[]) {

int i1 = 123;

int i2 = 456;

double d1 = (i1+i2)*1.2;//系统将转换为double型运算

float f1 = (float)((i1+i2)*1.2);//需要加强制转换符

byte b1 = 67;

byte b2 = 89;

byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需

//要强制转换符

System.out.println(b3);

double d2 = 1e200;

float f2 = (float)d2;//会产生溢出

System.out.println(f2);

float f3 = 1.23f;//必须加f

long l1 = 123;

long l2 = 30000000000L;//必须加l

float f = l1+l2+f3;//系统将转换为float型计算

long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)

}

}

修正下列代码中的编译错误或者可能产生的溢出:

602d9ff5b069

//TestConvert2

public class TestConvert2 {

public static void main(String[] args) {

int i=1,j=12;

float f1=(float)0.1; //0.1f 0.1是double类型,需要强制类型转换

float f2=123;

long l1 = 12345678,l2=8888888888L;//l2必须加L,否则会产生溢出

double d1 = 2e20,d2=124;

byte b1 = 1,b2 = 2,b3 = 127;//byte类型的范围是(-128~127)

j = j+10;//变量必须赋值才能使用

i = i/10;

i = (int)(i*0.1);//运算后为double类型,需要强制类型转换

char c1='a',c2=125;

byte b = (byte)(b1-b2);//运算后为int类型,需要强制类型转换

char c = (char)(c1+c2-1);运算后为int类型,需要强制类型转换

float f3 = f1+f2;

float f4 = (float)(f1+f2*0.1);//运算后为double类型,需要强制类型转换

double d = d1*i+j;

float f = (float)(d1*5+d2);

}

}

3、常量、变量

(1)常量:

常量是在程序运行中,值不能改变的量。用final定义。

语法:final=

整型常量:123

实型常量:3.14

字符常量:'a'

字符串常量:"helloworld"

逻辑常量:true、false

(2)变量:

从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域。因此,没一个变量使用前必须要先声明,然后进行赋值,才能使用。

602d9ff5b069

内存分为堆、栈、方法区。

栈(stack):

存放局部变量。

线程私有,不能实现线程间的共享。

先进后出。自动分配,连续内存空间,效率高。

堆:

存放new出来的对象。

不连续内存空间,分配灵活,效率低。

方法区:

存放永远不变而且唯一的文件。(类代码信息、静态变量、字符串常量)

被所有线程共享。

不连续内存空间,分配灵活,效率低

//内存分析

public class Test{

public static void main(String [] args){

Car c1=new Car();

c1.changeColor("红色");

c1.showColor();

System.out.println(Car.typeNum);

System.out.println(c1.typeNum);

Car c2=new Cae();

Engine e=new Engine();

e.speed=1000;

e.weight=e;

c2.engine=e;

c2.color="黑色";

c2.typeNum=10;

System.out.println(c1.typeNum);

}

}

class Car{

static int typeNum=4;

Engine enging;

String color;

void changeColor(String c){

color=c;

}

void showColor(){

System.out.println("我的颜色是:"+color);

}

}

class Engine{

int speed;

int weight;

}

内存分析图:

602d9ff5b069

-------static变量和方法内存分析---------

602d9ff5b069

static变量和方法存放在方法区内 **[ 属性ss和方法printSs() ] **,从属于类,只能调用同为static的变量和方法。调用static变量和方法时,直接调用类。

而非static变量和非static方法存放在堆中 **[ 属性name,id和方法study(),sayHello() ] ,调用时必须先实例化对象[ new ] **,同时加载类信息,可以调用static变量和方法。

-------this关键字------

602d9ff5b069

构造方法中,this是隐式参数,this.name指向括号中的name对象:

602d9ff5b069

this不能用于static方法,因为static方法不指向对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值