Maison  >  Article  >  Java  >  Types de données de base Java, mémoire, modificateurs, blocs de code

Types de données de base Java, mémoire, modificateurs, blocs de code

巴扎黑
巴扎黑original
2017-06-26 11:28:371080parcourir

Types de données Java

  • Types de données de base

  • Valeurs : int, court, long

  • Caractère : char

  • Booléen : booléen

  • Type de données de référence

  • classe (classe)

  • interface (interface)

  • tableau[]

  • Nombre d'octets occupés(1 byte= 8 bits)

  • int : 4 octets

  • char : Spécifie 2 octets. Si l'encodage UTF-8 est utilisé, les chiffres et l'anglais occupent 1 octet, et le chinois prend 3 octets ; si l'encodage GBK est utilisé, le chinois occupe 2 octets

  • float : section de 4 caractères

  • court : 2 octets

  • long : 8 octets

  • double : 8 octets

Remarque : La valeur par défaut pour les entiers en Java est Int, et la valeur par défaut pour les décimales est 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型

Mais la première ligne du code suivant est correcte.

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
  • Les variables (locales) ne sont valables que dans une paire de {} et sont ensuite détruites. Les blocs de code locaux peuvent déterminer le cycle de vie des variables locales.

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

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

Surcharge de fonctions et réécriture (override @Override)

  • Surcharge de fonctions

  • Dans la même classe

  • Avec le même nom

  • Les paramètres sont différents, ou les types sont différents

  • La surcharge de fonction et le type de retourn'ont rien à voir faire!

  • Remplacement de fonction (@Override)

  • Hérite de la classe parent ou implémente une excuse si quelque chose doit remplacer la méthode de la classe parent. , définissez les méthodes spécifiques à la classe enfant.

  • Le type de retour, la liste des paramètres et le nom de la fonction sont tous cohérents. Les modificateurs sont généralement les mêmes, et en général, tout est pareil sauf pour l'implémentation interne.

Tableau - type de référence

  • Définition du tableau

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

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行

Mémoire de pile et mémoire de tas

  • Mémoire de pile : stocke les objets locaux, qui sont libérés à la fin de la portée

  • Mémoire de tas : stocke les tableaux et les objets, tout ce qui est créé par nouveau est dans le tas In mémoire

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进制表示的地址

Modificateur d'accès

  • public : toute classe ou package peut accéder

  • privé : accès limité à la classe actuelle

  • par défaut (aucun modificateur n'est écrit, par défaut) : le même package est accessible, les différentes sous-classes du package ne peuvent pas accès soit

  • protégé : Seules les sous-classes d'un même package et des packages différents peuvent y accéder. (La plage est légèrement plus grande que celle par défaut)

public static void main(String args[])

Il s'agit d'un format fixe !

Pourquoi faut-il que ça soit écrit comme ça ?

  • public : Le monde extérieur (JVM) appelle la fonction main() Afin de faciliter l'accès, elle est définie sur la plus haute autorité.

    statique : les fonctions statiques, et non les fonctions membres de la classe, peuvent être appelées directement via
  • sans nouveaux objets.
  • 类名.main()

    void : La fonction main() exécute simplement la tâche et n'a pas besoin de renvoyer de valeur.
  • main() : JVM reconnaît le mot main() Lorsqu'il répond à la méthode d'écriture de
  • , il sera considéré comme le point d'entrée du programme et lancera l'exécution.
  • public static void main(String args[])

    String args[] : paramètres de ligne de commande, qui doivent être
static static
public static void abc(String args[]) // 函数名不是main,不是主函数public static void main() // 缺少命令行参数 String args[]也不是主函数static void abc(String args[]) // 不是主函数,一定要是public static void main(String args[])
Fonction statique

La fonction statique est généralement utilisée comme fonction outil, dans laquelle les

membres de classe

ne peuvent pas être utilisés. Seuls les

membres ou méthodes statiques peuvent être utilisés. mais les fonctions membres Mais vous pouvez utiliser des données et des méthodes statiques. Variable statique

Il s'agit d'une donnée statique. Il peut être partagé par de nombreux objets. Si l'objet A change a, a dans l'objet B changera également. Tout le monde utilise la même somme d’argent.

static int money

  • 成员变量和静态变量

  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() --> 构造代码块 --> 构造方法

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn