Java 学习记录 常量 变量 数据类型

本文详细介绍了Java中的JDK、JRE和JVM,以及常用的开发快捷键。接着讲解了Java中的变量类型,包括常量、局部变量、实例变量和类变量,强调了它们的生命周期、作用域和内存分配。特别讨论了字符串常量池和对象创建,分析了`String`对象的比较和内存占用。此外,还涵盖了基本数据类型及其对象类型,以及数组的定义。
摘要由CSDN通过智能技术生成

JDK: Java的依赖包

JRE: Java 运行环境

JVM: Java 虚拟机

懒人·必备:  Ctrl + Alt + L  格式化代码

                     Ctrl + Alt + T  快速生成常用流程控制语句

                      右键  +  Generate (Alt+ Insert) 快速生成构造器存取器等代码结构 

         1.常量

        == 判断的是地址,并非数值大小

        判断数值或内容使用 equals()方法

public class Test{  
   Integer i1=new Integer(1);  
   Integer i2=new Integer(1);  
        //i1,i2分别位于堆中不同的内存空间  
   System.out.println(i1==i2);//输出false  
   Integer i3=1;  
   Integer i4=1;  
    //i3,i4指向常量池中同一个内存空间  
   System.out.println(i3==i4);//输出true  
    //很显然,i1,i3位于不同的内存空间  
    System.out.println(i1==i3);//输出false  
}  

  常量池

String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
String s4 = "Hel" + new String("lo");
String s5 = new String("Hello");
String s6 = s5.intern();
String s7 = "H";
String s8 = "ello";
String s9 = s7 + s8;
          
System.out.println(s1 == s2);  // true
//s1和 s2都是字面量,存放于同一个常量池
System.out.println(s1 == s3);  // true
//s3虽然是动态拼接出来的字符串,但是所有参与拼接的部分都是已知的字面量,在编译期间,这种
//拼接会被优化,编译器直接帮你拼好,因此String s3 = "Hel" + "lo";在class文件中被优化成
//String s3 = "Hello";
System.out.println(s1 == s4);  // false
//s4 第二元素为堆内地址,拼接后并不在常量池
System.out.println(s1 == s9);  // false
//s9由两个常量计算而来,编译器,不可能当解释器用,所以编译时s9为一个未知新地址。
System.out.println(s4 == s5);  // false
//同上
System.out.println(s1 == s6);  // true
//intern()方法将目标添加至常量池,故和s1相等

String s = new String("abc")创建了几个对象?

        两个。

 abc本身是常量池中一个对象,存放于栈。new 创建新的对象并复制常量池对象存放于堆。

String name=new String("java"+"hello");

         四个。

1."java"创建了一个对象,存于String常量池
2."hello"创建了一个对象,存于String常量池
3."java"+"hello",创建了一个对象,存于常量池(基于字符串的+操作,如带有引用的,将在堆中创建对象,否则值会存于字符常量池)
4.new将会创建一个对象,将字符常量池中的"javahello"复制到堆中
 

String str1="abc";
String str2="def";
String str3=str1+str2;
System.out.println(str3=="abcdef");
//结果是false

运行过程 : str1和str2为栈的常量池对象  

 编译器编译时 + 运算符将str1 和 str2 在堆中新建并相加,在堆中建立一个新的地址存放结果,并复制地址给栈内的str3  

 所以"abcdef"为常量池中的对象  str3为 堆内实际运行结果的地址

"abc"+"def" 字面量相加, 编译器进行优化 ,得到 "abcdef"

        String str3=str1+str2;  将字符串池中的对象在堆内新建并相加得到新的对象,并返回新地址给str3。

常量的声明方法
        final 数据类型 常量名称 = 值;
        final 数据类型 常量名称1 = 值1, 常量名称2 = 值2,……常量名称n = 值n;

final double PI = 3.14;
final char MALE=‘M’,FEMALE=‘F’;

        也可以先声明后赋值,仅可赋值一次

final double PI;
PI = 3.1415926

变量

        Java局部变量

  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见;
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
package com.runoob.test;
public class Test{ 
   public void pupAge(){
      int age = 0;  //在栈内进行分配,且作用域仅在pupAge
      age = age + 7;
      System.out.println("小狗的年龄是: " + age);
   }
   
   public static void main(String args[]){
      Test test = new Test();
      test.pupAge();
   }
}

        Java实例变量

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
import java.io.*;
public class Employee{
   // 这个成员变量对子类可见
   public String name;
   // 私有变量,仅在该类可见
   private double salary;
   //在构造器中对name赋值
   public Employee (String empName){
      name = empName;
   }
   //设定salary的值
   public void setSalary(double empSal){
      salary = empSal;
   }  
   // 打印信息
   public void printEmp(){
      System.out.println("名字 : " + name );
      System.out.println("薪水 : " + salary);
   }
 
   public static void main(String args[]){
      Employee empOne = new Employee("RUNOOB");
      empOne.setSalary(1000);
      empOne.printEmp();
   }
}

        Java类变量(静态变量)

  • 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。

三个变量的区别

成员变量和静态变量的区别

      1、两个变量的生命周期不同

            成员变量随着对象的创建而存在,随着对象被回收而释放。

            静态变量随着类的加载而存在,随着类的消失而消失。

      2、调用方式不同

            成员变量只能被对象调用。

            静态变量可以被对象调用,还可以被类名调用。

      3、别名不同

            成员变量也称为实例变量。

            静态变量也称为类变量。

      4、数据存储位置不同

            成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

 总结

        java变量包含静态变量(static Variable)、成员变量()和局部(local Variable )变量三种。其实,也可以说两种,静态变量和成员变量都是全局变量(Global Variable),只是成员变量是动态的,还有就是,静态变量的生存周期是由类决定的,是在加载类文件时初始化的;而成员变量则是在类中没有用static修饰的变量,它的生存周期是由对象决定的,是在new 一个对象时初始化的

数据类型

插一个数组的定义吧

int [] a = {1,2,3,4,5};

获取:  a[0]

String [] a = {"a","b","c"};


int [] a = new int [3];
a[0]=1;
a[1]=2;
... 
基本类型对象类型说明位数基本类型
booleanBoolean布尔型10,1
byteByte字节8-128 - 127
shortShort短整型16-32768 - 32767
charChar字符型16‘ \u0000 - u\ffff ’
intInteger整型32-2147483648-2147483647
floatFloat浮点型32-3.40292347E+38-3.40292347E+38
longLong长整型649233372036854477808-9223372036854775807
doubleDouble双精度641.79769313486231570E+308-1.79769313486231570E+308
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值