2 Java的基本步伐计划布局(基本语法1)

打印 上一主题 下一主题

主题 1839|帖子 1839|积分 5517

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<hr> 前言

<hr> 一、数据范例

java数据范例分为两大类:基本数据范例和引用数据范例


  • 基本数据范例:整数、浮点数、字符(char)、布尔范例
  • 引用数据范例:封装在类对象里面的数据范例,字符串(不可变)、数组(可变)、集合(可变)、字典(可变)
0 与Python的一些区别

我们主要的目标就是为了搞清楚这些和Python里面有什么异同。
首先,Python传参传的全是传引用。
给出java里面传参规则:


  • 基本数据范例是传值:即传递的是这个变量的值的副本;

  • 引用数据雷同是传引用:一样寻常情况下传引用会修改一个就会影响另一个;但如果在类里面规定不可修改,其实也可以实现不影响另一个的;
    典范例子就是java里面的字符串是引用数据范例,但是不可变;对原字符串修改其实是新创建一个字符对象在赋值已往,并不是在原来的内存地址上面修改。
基本数据范例需解释一下这里和Python的区别,用整数来说吧。
Python里面整数是不可修改的,传的是引用,


  • 修改是新创建一个整数对象在赋值已往;
  • 且在函数中传参于全局变量与局部变量的关系和Python不可变数据范例的特殊修改方式,导致在函数内部修改不会影响外部的全局变量,因为内部只是一个局部变量;下面代码中的两个 a 现实上是两个不一样的东西,一个放在全局空间,一个放在局部空间。
但在java中,基本数据范例传的是值的副本。什么叫副本就是一个完全不相关的东西,修改一个不会影响另一个的那种。


  • 先说一下修改吧,java中基本数据范例是存在一个栈中,单独没有独立的内存地址(你当他有也行),我们就当它有吧,进行修改操纵就直接是在原内存上修改值就可以了。意思理解成假设java中整数有地址,a = a + 1这种操纵是在原地址上操纵。
  • 然后就是函数传参,由于传参传的是值的副本,那函数内怎么修改肯定不会影响外面的了。
  1. a = 10
  2. def f(a):
  3.     a = a+1
  4. f(a)
复制代码
  1. public class Main {
  2.    
  3.     public static void main(String[] args) {
  4.    
  5.         int a = 10;
  6.         modifyValue(a);     // 11   内部自动新创建了一个a的值的副本变量传了进去
  7.         System.out.println("Outside method: " + a);  // 10
  8.     }
  9.     public static void modifyValue(int x) {
  10.       
  11.         x = x + 1;
  12.         System.out.println("Inside method: " + x);
  13.     }
  14. }
复制代码
在这个例子中,a 是一个整数变量,初始值为10。当我们将 a 传递给 modifyValue 方法时,传递的是 a 的值的副本(即10)。在 modifyValue 方法内部,对参数 x 的修改不会影响外部的 a。这就是Java中基本范例按值传递的体现。
python里面用全局变量与局部变量解释,java里面更简单直接用传的是值的副本就可以解释了。
信托还有一个疑问,在Python中的不可变和java中的不可变什么意思;
整数在Python和java中都是不可变的,不可变指的是一个数据范例创建了,它的内存地址就不能改变。Python中直接就硬到底,整数对象生成了就赖在谁人地方了;java宽松一点,地址不能变,但里面值照旧可以变的。
数组这种固然最外层的地址不可以变,但内部的其他地址随时都可以变,那就可变了呗。
   【注】:java里面基本数据范例都看做不可变数据范例 ,不可变指的是地址不可变。对象建立了,无论内部地址照旧外部地址都不能变的那种。如此看来,固然Python和java内部规则有不同,但终极结果却是一样的,我们直接可以无缝衔接上。
以是看很多博客将Python的不可变数据函数传参解释成 ‘传值’ 也是有道理的,毕竟和真的传值最后结果是一样的,不过我们照旧要牢牢记住照旧传引用的。固然最后结果一样,但档次不一样嘛,拿出去吹牛皮也好啊!
  在函数内部Python和java照旧有一个奇奇怪怪的区别:
  1. a = 10
  2. def add(a):
  3.     a = 5      # 在Python中,函数内部这种 a 是创建了一个新的局部变量,并不是传进来的那个 a,
  4.                 # 可以看到,上面括号里面的a还是灰色的,说明压根没用上海
  5. add(a)
  6. print(a)   # 10
  7. lst = [1, 2, 3, 4, 5]
  8. def add2(lst):
  9.     lst = [1]
  10.    
  11. add2(lst)
  12. print(lst)   # [1, 2, 3, 4, 5]
复制代码
  1. public class Main {
  2.    
  3.     public static void main(String[] args) {
  4.    
  5.         int a = 10;
  6.         modifyValue(a);     // 20
  7.         System.out.println("Outside method: " + a);  // 10
  8.     }
  9.     public static void modifyValue(int x) {
  10.    
  11.         x = 20;       // java这里并没有创建局部变量(很显然没有声明变量的语法),说明用的就是传进来的 x ,和Python不一样
  12.         System.out.println("Inside method: " + x);
  13.     }
  14. }
复制代码
奇奇怪怪的吧!这些如果不注意不一定能发现!奇奇怪怪的知识又增加了。
1 基本数据范例

(1)整型

    范例   存储需求   取值范围         int   4字节   -2 147 483 648 ~ 2 147 483 647(略高于20亿)       short   2字节   -32 768 ~ 32 767       long   8字节   -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807       byte   1字节   -128 ~ 127     【注】:通常情况下 int 最常用,long也常用;short和byte范例主要在特定场所下用。
【特别注意】:使用long时必要再数据后面加一个大写或小写 L ,雷同 long a = 999999999L。其他的正常,就long有点神经病
  (2)浮点数范例

    范例   存储需求   取值范围         float   4字节   约莫  ± 3.40282347 × 1 0 38 \pm 3.402 823 47\times 10^{38} ±3.40282347×1038(6~7位有效数字)       double   8字节   约莫  ± 1.79769313486231570 × 1 0 308 \pm 1.79769313486231570\times 10^{308} ±1.79769313486231570×10308(15位有效数字)     【注】:double的精度是float的两倍,故也称为双精度;通常float范例的精度并不能满足要求,因此用的少,现实中照旧要用double
【特别注意】:由于默认是double,以是使用float是数据后面要加一个大写或小写的F,雷同 float a = 0.99F
  另外,有三个特殊的浮点数表现溢出和堕落情况:


  • 正无穷大 :Double.POSITIVE_INFINITY
  • 负无穷大 : Double.NEGATIVE_INFINITY
  • NaN(不是一个数,大概称为一个无法表现的浮点数),例如 0/0 就出现 NaN : Double.NaN
   【注】不能用 == 判定一个特定结果是否是Double.NaN ,但是可以用 Double.isNaN(x)
  1. if (x==Double.NaN)   // 会报错
  2. if (Double.isNaN(x))  // 这样才行
复制代码
  【注】这里关于数据范例的取值巨细关系:double>float>long>int>short>byte
  (3)字符(char)范例

    范例   符号   取值范围         字符   char   0-65535(这里是指编码表里对应的数,一样寻常是Unicode编码)   (4)布尔范例(true、false)

    范例   符号   取值范围         布尔   boolean   true、false   (5)代码示例

  1. public class HelloWord{
  2.    
  3.                 public static void main(String[] args) {
  4.    
  5.             // int
  6.             int i = 9999999;
  7.             System.out.println(i);
  8.             // short
  9.             short s = 9999;
  10.             System.out.println(s);
  11.             // byte
  12.             byte b = 100;
  13.             System.out.println(b);
  14.             // long
  15.             long l = 999999999999999999L;    // long类型后面要加一个大写或小写L
  16.             System.out.println(l);
  17.             // double
  18.             double d = 0.98;
  19.             System.out.println(d);
  20.             // float
  21.             float f = 0.98F;       // float类型后面要加一个大写或小写F
  22.             System.out.println(f);
  23.             // char
  24.             char c = 'a';         // 字符必须用单引号
  25.             System.out.println(c);
  26.             // boolean
  27.             boolean t = true;
  28.             System.out.println(t);
  29.         }
  30. }
复制代码
2 引用数据范例



  • 引用数据范例:封装在类对象里面的数据范例,字符串(不可变)、数组(可变)、集合(可变)、字典(可变)
   【注】:这里只对字符串做一个简单的解释,具体的必要学到具体的在说
     范例   符号   注意         字符串(不可变)   String   java中字符串必须使用双引号  
  1. public class HelloWord{
  2.    
  3.                 public static void main(String[] args) {
  4.    
  5.             String a = "hello world!";   // java中字符串必须使用双引号
  6.             System.out.println(a);
  7.         }
  8. }
复制代码
二、变量与常量

1 变量

使用语法


  • 声明变量:  数据范例:变量名; 数据范例:变量名; 数据范例:变量名;
  • 初始化变量: 数据范例:变量名 = 数据值; 数据范例:变量名=数据值; 数据范例:变量名=数据值;
  1. public class HelloWord{
  2.    
  3.                 public static void main(String[] args){
  4.    
  5.                         int a;                  // 声明变量
  6.                         a = 10;
  7.                         System.out.println(a);  // 10
  8.                         double b = 2.0;          // 声明变量+初始化
  9.                         b = b + 10;
  10.                         System.out.println(b);   // 12.0
  11.                         int i,j = 0, 1;
  12.                         System.out.println(i,j);
  13.                 }
  14. }
复制代码
  【注】:声明变量范例只必要声明一次即可,声明事后后面再用直接用变量名即可;声明变量和变量初始化可以同时进行;
另外,声明变量名时声明变量名不能相同。
  与Python相比的小细节


  • java支持同时声明多个变量,但多重赋值语法和Python有区别
  • java的打印函数不支持Python一样同时打印多个变量
  1. public class HelloWord{
  2.    
  3.                 public static void main(String[] args){
  4.    
  5.                         int i,j;
  6.                         i = 0;
  7.                         j = 1;
  8.                         System.out.println(i);    // 0
  9.                         System.out.println(j);    // 1
  10.                         int a = 4 , b =5;         // java的多重赋值语法
  11.                         System.out.println(a);    // 4
  12.                         System.out.println(b);    // 5
  13.                        
  14.                         System.out.println
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表