>  기사  >  Java  >  Java 기본 데이터 유형, 메모리, 수정자, 코드 블록

Java 기본 데이터 유형, 메모리, 수정자, 코드 블록

巴扎黑
巴扎黑원래의
2017-06-26 11:28:371121검색

Java 데이터 유형

  • 기본 데이터 유형

  • 숫자: int, short, long

  • 문자: char

  • 부울: 부울

  • 견적 데이터 유형

  • class(클래스)

  • 인터페이스(인터페이스)

  • array[]

  • 점유된 바이트 수(1바이트= 8비트)1 byte= 8 bits

  • int:4字节

  • char: 规定2字节。若使用UTF-8编码,数字和英文等占1个字节,中文3个字节;若用GBK编码,中文是2个字节

  • float:4字节

  • short:2字节

  • long:8字节

  • double:8字节

注意:Java中整数默认的是Int,小数默认double

float f = 2.3; // 2.3默认为double,不能转为float,可能丢失精度float f = 2.3f; // true 末尾加f,表示这是一个float型long l = 12343565475989778034; // false, 默认为int,但是超出了范围long l = 12343565475989778034l; // 末尾加l,表示这是long型

但是如下代码第一行是正确的。

byte b = 4; // 默认int,但经过检查4是在byte型范围内的,发生int -> byte的隐式强转b =  b + 3; // false,和为int,int型不能赋值给byte// aa和bb都是变量,其和不能确定是否在范围内byte aa = 3;byte bb = 4;byte cc = aa + bb; // falsebyte cc = 3 + 4; // 但若明确给出常量,则true
  • 变量(局部)仅在一对{}内有效,然后被销毁。局部代码块,可以决定局部变量的生命周期。

{  int a = 3;
}
System.out.println(a); // false, 已经出了这对{},被销毁了
  • switch语句

// 若不加break,从匹配到的那个case开始,之后如果都没break,都执行,不会跳出switch (expression) {  case x: 
    code;break;  case y:
    code;break;  default:
    code;break}

函数重载和重写(覆写@Override)

  • 函数重载

  • 同一个类中

  • 同名

  • 参数不同,或者类型不同

  • 函数重载和返回类型无关

  • 函数覆写(@Override)

  • 继承了父类或者实现了借口,有事需要Override父类的方法,定义子类特有的方法。

  • 返回类型,参数列表,函数名都一致。修饰符一般也一致,总的来说,除了内部实现全部一样。

数组--引用类型

  • 数组的定义

int[] a = {1, 23, 3};int[] b = new int[4]; // 此种定义方式必须指定数组长度int[] c = new int[]{1, 2, 3}; // 一般不这么写
  • 二维数组

int[][] arr2= new int[3][]; // 至少给第一维指定长度// 每行的列数相同,3行2列int[][] = arr2 = new int[3][2];// 每行列数不一样int[][] arr2= new int[3][];
arr2[0] = new int[2]; // 第1行arr2[1] = new int[3]; // 第2行arr2[2] = new int[4]; // 第3行

栈内存和堆内存

  • 栈内存:存储的是局部对象,作用域结束就被释放

  • 堆内存:存储的是数组和对象,凡是new建立的都在堆内存中

int[] arr = new int[3];// 这句右边new一个引用数据到堆内存,给三个值默认初始化为0// a指向这个数组对象,即地址。也可以说new出来的数组把它的地址给了arr// arr = null; 表示空,不绑定地址了int[] a = new int[3];int[] b = new int[5];
a = b; // 把b的地址绑定到a,a和b都指向b的地址了System.out.println(arr); // 打印的是地址,格式为"[I@number",表示int,number为16进制表示的地址

访问修饰符

  • public:任何类任何包都可以访问

  • private:仅限于当前类中访问

  • default(什么修饰符都不写,默认):同一个包的都可以访问,不同包的子类也不能访问

  • protected:同一个包,不同包只有子类可访问。(范围比default大一点)

public static void main(String args[])

这是固定格式!

为什么必须这样写?

  • public:外界(JVM)调用main()函数,为了方便访问,设为最高权限

  • static:静态函数,非类成员函数,无需new新对象就可通过类名.main()直接调用。

  • void:main()函数就是执行任务,不需要返回什么值。

  • main():JVM识别main()字样,当满足public static void main(String args[])这样的写法时,则把其当成程序的入口开始执行。

  • String args[]:命令行参数,规定必须要有

public static void abc(String args[]) // 函数名不是main,不是主函数public static void main() // 缺少命令行参数 String args[]也不是主函数static void abc(String args[]) // 不是主函数,一定要是public static void main(String args[])

静态static

静态函数

静态函数一般作为工具函数,里面不可以用类成员,只能全用静态成员或者方法,但是成员函数却可以用静态数据和方法。

静态变量

static int money

int : 4바이트🎜🎜🎜🎜char: 2바이트를 지정합니다. UTF-8 인코딩을 사용하면 숫자와 영어가 1바이트를 차지하고, GBK 인코딩을 사용하면 중국어는 2바이트를 차지합니다. 🎜long: 8바이트 🎜🎜🎜🎜double: 8바이트 🎜🎜
🎜참고: Java에서 정수의 기본값은 🎜Int🎜이고 소수의 기본값은 🎜double🎜🎜입니다. blockquote> 🎜
package Test;public class StaticDemo {private static int money = 100;public int getMonney() {return money;
    }public void useMoney() {
        money--;
    }public static void main(String[] args) {
        StaticDemo a = new StaticDemo();
        StaticDemo b = new StaticDemo();// a用了一块a.useMoney();// 还剩99System.out.println(a.getMonney());// b用的是同一份moneyb.useMoney();// 还剩98System.out.println(b.getMonney());
    }
}
🎜🎜하지만 다음 코드의 첫 번째 줄은 정확합니다. 🎜🎜
public class Abc {  
  // 构造代码块,没有static。每new一个对象,就执行一次,故称为构造代码块
  // 针对不同的对象,进行相同的初始化,而构造函数对不同的对象进行不同的初始化,如给不同的人传入不同的名字和年龄进行初始化
  {
    System.out.println("我是构造代码块")
  }  // 构造函数
  Abc() {
    System.out.pritnln("我是构造函数,后于构造代码块执行");
  }  // 静态代码块最先执行,不论放在main()前面还是后面,都先于main加载,且只执行一次
  static {
  System.out.println("我最先");
}  public static void main(String args[]) {
    Abc a = new Abc(); // 先进入先构造代码块,// 以下是局部代码块,b只在这对{}内有效{      int b = 3;
    }
    System.out.println(b); // false,b已经被释放
  }
}
🎜🎜🎜🎜변수(로컬)는 {} 쌍 내에서만 유효하며 이후에는 파기됩니다. 지역 코드 블록은 지역 변수의 수명 주기를 결정할 수 있습니다. 🎜🎜🎜rrreee🎜🎜🎜🎜switch 문🎜🎜🎜rrreee🎜🎜함수 오버로딩 및 다시 쓰기(@Override 재정의)🎜🎜🎜🎜함수 오버로딩🎜🎜🎜🎜동일 클래스 🎜🎜🎜🎜 같은 이름🎜🎜🎜🎜매개변수가 다르거나, 유형이 다르거나🎜🎜🎜🎜함수 오버로딩과 반환 유형🎜할 일이 없습니다🎜! 🎜🎜🎜🎜Function override (@Override)🎜🎜🎜🎜상위 클래스를 상속받거나, 상위 클래스의 메소드를 Override해야 하는 것이 있다면 하위 클래스에 고유한 메소드를 정의하세요. 🎜🎜🎜🎜반환 유형, 매개변수 목록, 함수 이름은 모두 동일합니다. 수정자는 일반적으로 동일하며 일반적으로 내부 구현을 제외하고 모든 것이 동일합니다. 🎜🎜🎜배열--참조 유형🎜🎜🎜🎜배열의 정의🎜🎜🎜rrreee🎜🎜🎜🎜2차원 배열🎜🎜🎜rrreee🎜🎜스택 메모리 및 힙 메모리 🎜 🎜🎜🎜스택 메모리: 범위가 끝날 때 해제되는 로컬 개체를 저장합니다.🎜🎜🎜🎜힙 메모리: 배열과 개체를 저장하며, 🎜new🎜에서 생성된 모든 것은 힙 메모리에 있습니다🎜🎜🎜 rrreee🎜🎜 접근 수정자🎜🎜🎜🎜public: 모든 클래스와 모든 패키지에 접근 가능🎜🎜🎜🎜private: 접근이 현재 클래스로 제한됨🎜🎜🎜🎜default(수식자 없음, 기본값): 동일한 패키지 모두 접근 가능하며 하위 클래스 🎜🎜🎜🎜protected: 동일한 패키지에서는 다른 패키지의 하위 클래스에만 액세스할 수 있습니다. (범위는 기본값보다 조금 더 큽니다)🎜🎜🎜public static void main(String args[])🎜🎜🎜이것은 고정된 형식입니다! 🎜🎜🎜왜 이렇게 써야 할까요? 🎜🎜🎜🎜public: 외부 세계(JVM)는 접근을 용이하게 하기 위해 가장 높은 권한으로 설정됩니다. 🎜🎜🎜🎜static: 정적 함수, 비클래스 멤버 함수, new 없음. 객체는 클래스 이름을 통해 전달될 수 있습니다. .main()이 직접 호출됩니다. 🎜🎜🎜🎜void: main() 함수는 작업을 실행하는 것이며 어떤 값도 반환할 필요가 없습니다. 🎜🎜🎜🎜main(): JVM은 main()이라는 단어를 인식합니다. public static void main(String args[])의 작성 방법을 충족하면 의 진입점으로 간주됩니다. 프로그램을 실행하고 시작합니다. 🎜🎜🎜🎜String args[]: 명령줄 매개변수, 🎜🎜🎜rrreee🎜🎜staticstatic🎜

정적 함수

🎜정적 함수가 일반적으로 도구로 사용됩니다. 🎜클래스 멤버🎜를 사용할 때는 🎜정적 멤버나 메소드🎜만 사용할 수 있지만, 멤버 함수는 정적 데이터와 메소드를 사용할 수 있습니다. 🎜

정적 변수

🎜static int Money정적 데이터입니다. 여러 객체가 공유할 수 있습니다. 객체 A가 a를 변경하면 객체 B의 a도 변경됩니다. 모두가 같은 돈을 사용합니다. 🎜🎜rreee🎜
  • 成员变量和静态变量

  1. 成员变量随对象的建立而建立,随对象消亡而消亡。13dd6e535e0887248bab718236989bd4 静态变量随着(和对象即实例区别开)的加载而加载,随类的消亡而消亡。即静态成员是先于实例存在的,还没new出对象就存在了。

  2. 成员对象只能是new出新实例后调用。13dd6e535e0887248bab718236989bd4 静态成员可以直接使用,类名.静态变量即可。

  3. 成员变量被称为实例变量。13dd6e535e0887248bab718236989bd4 静态变量被称为类 变量

  4. 成员变量位于堆内存的对象中,是对象的特有数据。 13dd6e535e0887248bab718236989bd4 静态变量位于方法区(的静态区)中,也叫对象的共享数据

Q:static为何不能调用非静态方法或者数据?

A:因为静态数据先于对象就已经产生,成员变量还不存在,不能访问。同理static函数中不能出现this、super关键字。

Q: 什么时候用static?

A:1. 静态变量,共享数据时,各个对象都使用同一个数据,不必作为对象特有的数据时候。如每个学生的姓名是特有的,但是每个学生可以共用同一个图书馆。

  1. 静态方法,无需访问类成员时(非静态),就可以定义为静态,一般为工具函数。

各种代码块

public class Abc {  
  // 构造代码块,没有static。每new一个对象,就执行一次,故称为构造代码块
  // 针对不同的对象,进行相同的初始化,而构造函数对不同的对象进行不同的初始化,如给不同的人传入不同的名字和年龄进行初始化
  {
    System.out.println("我是构造代码块")
  }  // 构造函数
  Abc() {
    System.out.pritnln("我是构造函数,后于构造代码块执行");
  }  // 静态代码块最先执行,不论放在main()前面还是后面,都先于main加载,且只执行一次
  static {
  System.out.println("我最先");
}  public static void main(String args[]) {
    Abc a = new Abc(); // 先进入先构造代码块,// 以下是局部代码块,b只在这对{}内有效{      int b = 3;
    }
    System.out.println(b); // false,b已经被释放
  }
}

!!!总的来说,执行顺序:static代码块 --> main() --> 构造代码块 --> 构造方法

위 내용은 Java 기본 데이터 유형, 메모리, 수정자, 코드 블록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.