草庐IT

day04-Java基础语法

liyuelian 2023-04-15 原文

Java基础语法

1.注释

注释不会被执行,是用来给写代码的人看的。

1.1单行注释

单行注释只能注释一行文字

//  注释

1.2多行注释

多行注释可以注释多行文字

/*  注释
    注释
    注释
*/

1.3文档注释

JavaDoc:文档注释

/**
 * @Description HelloWrold
 * @Author liyuelian
 */

 

2.标识符和关键字

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

2.1关键字

1)48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while

2)2个保留字(现在没用以后可能用到作为关键字):goto、const

3)3个特殊直接量:true、false、null

2.2标识符注意点

  • 所有的标识符都要以字母(A-Z或者a-z)、美元符($)、或者下划线(_)开始;

  • 首字符之后可以是字母(A-Z或者a-z)、美元符($)、下划线(_)或者数字的四种字符任何组合;

  • 不能使用关键字作为变量名或者方法名;

  • 标识符大小写敏感

  • 可以使用中文命名,但是不建议使用;

    ![image](https://img2022.cnblogs.com/blog/2192446/202207/2192446-20220723192222792-1231560748.png)

     

 

3.数据类型

强类型语言:(C、C++、Java等)

要求变量的使用严格符合规定,所有变量必须先定义之后才能使用。

弱类型语言:(VB、JS等)

可以先使用后定义。

Java的数据类型分为两大类:

  • 1. 基本数据类型

  • 2. 引用数据类型

类、接口、数组....

3.1基本数据类型

基本数据类型(primitive Type)包括四大类八小种

1、整数型

    byte 
    short 
    int 
    long

2、浮点型

    float
    double

3、布尔型

    boolean

4、字符型

    char

字符串String属于引用类,不是关键字

3.2引用数据类型

Reference Type

  1. 接口

  2. 数组

     

3.3什么是字节?

  • 位(bit):是计算机内部数据存储的最小单位,1bit表示一位,如1011 0010是一个八位二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。

  • 1B(byte,字节)=8b(bit,位)

  • 字符:是指计算机中使用的字母、数字、字和符号。

 

4.数据类型拓展以及面试题讲解

4.1整数拓展

进制:二进制(0b)、八进制(0)、十进制、十六进制(0x)

public class Hello {
    public static void main(String[] args) {
        int i=0b10;//二进制0b
        int i1=10;
        int i2=010;//八进制0
        int i3=0x10;//十六进制0x
        System.out.println(i);
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
    }
}

运行结果:

​
2
10
8
16
    
Process finished with exit code 0

4.2浮点数拓展

例子1 银行业务怎么表示钱

public class Hello {
    public static void main(String[] args) {
        //浮点数拓展? 银行怎么表示 钱
        //例子1
        float f = 0.1f;//0.1
        double d=1.0/10;//0.1
        System.out.println(f==d);//false
​
        float d1=292929292828282f;
        float d2=d1+1;
        System.out.println(d1==d2);//true
        
    }
}

运行结果:

false
true

原因:浮点数的位数是有限的,离散的,但是某些运算的结果可能会有无限位小数。浮点数一般会存在舍入误差,接近但不等于实际数值。因此最好完全避免使用浮点数进行比较

那么银行业务怎么表示钱?

答案是使用数学工具类BigDecimal

4.3字符拓展

public class Hello {
    public static void main(String[] args) {
       char c1='a';
       char c2='中';
​
        System.out.println(c1);
        System.out.println((int)c1);//强制转换
​
        System.out.println(c2);
        System.out.println((int)c2);//强制转换
    }
}

运行结果:

a
97
中
20013

原因:所有的字符本质还是数字--->涉及到编码问题 Unicode

unicode 表:

97 代表 a

65 代表 A

Unicode编码范围从U0000~UFFFF(0~65535)

 

转义字符

转义字符(Escape character),所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。简单来说就是在一些字符前加 “\” 使它具有其他意义。

4.4布尔值拓展

public class Hello {
    public static void main(String[] args) {
       boolean flag=true;
       if(flag==true){}
       if(flag){}//与上一行功能一致,默认为true
    }
}

5.类型转换

八种数据类型占用空间大小:

类型描述 基本数据类型 占用空间大小[字节] 取值范围 默认值
字节型 byte 1 -128~127 0
短整型 short 2 -32768~32768 0
整型 int 4 -2^31~2^31-1 0
长整型 long 8 -2^63~2^63-1 0
单精度浮点型 float 4 3.4e-45~1.4e38 0.0f
双精度浮点型 double 8 4.9e-324~1.8e308 0.0d
字符型 char 2 0~65535 '\u0000'
布尔型 boolean 1 true/false false

*关于默认值:成员变量没有手动赋值,系统会默认赋值,局部变量则不会。八种数字类型的默认值是一切向0看齐。

由于Java是强类型语言,所以进行有些运算时需要用到类型转换

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >

byte < short / char < int < long < float < double

小数优先,因此虽然float的字节数比long小,但long转换成float仍是自动类型转换。

运算中,不同类型的数据先转化为同一类型,然后进行运算。

 

5.1强制类型转换

大容量转换成小容量,叫做强制类型转换(高—>低)

例子

public class Hello {
    public static void main(String[] args) {
      int i=128;
      byte b=(byte)128;//内存溢出
        //强制转换   (类型)变量名 
       
        System.out.println(i);
        System.out.println(b);
    }
}

运行结果:

128
-128

5.2自动类型转换

小容量向大容量转换,称为自动类型转换(低—>高)

例子

public class Hello {
    public static void main(String[] args) {
      int i=128;
      double b=i;
​
        //强制转换   (类型)变量名
        System.out.println(i);
        System.out.println(b);
    }
}

运行结果:

128
128.0

int转成long类型,由低到高,因此会自动转换。

注意点:

  1. 不能对布尔类型进行转换

  2. 不能把对象类型转换为不相干的类型

  3. 再把高容量转换成低容量时需要强制转换

  4. 转换时可能存在内存溢出或者精度问题

public class Hello {
    public static void main(String[] args) {
        System.out.println((int)23.7);//23,默认向0取整
        System.out.println((int)-45.89f);//-45,默认向0取整
    }
}
public class Hello {
    public static void main(String[] args) {
        char c='a';
        int d=c+1;
        System.out.println(d);//98,自动转换
        System.out.println((char)d);//b,强制转换
    }
}
public class Hello {
    public static void main(String[] args) {
        //操作比较大的数时,注意溢出问题
        //JDK7新特性,数字之间可以用下划线分割
        int money =10_0000_0000;
        System.out.println(money);//输出为1000000000
​
        int years=20;
        int total=money*years;
        System.out.println(total);//-1474836480,溢出
​
        long total2=money*years;//-1474836480
        //在赋值给total2之前,由于money和years都是int型,
        // 那么相乘所得的结果也是int类型,已经出现溢出问题,
        // 因此赋值之前的值已经为-1474836480,所以这里的结果也是-1474836480
​
        long total3=money*(long)years;//先把一个数转换为long
        System.out.println(total3);//结果是 20000000000
    }
}
 

有关day04-Java基础语法的更多相关文章

  1. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  2. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

  5. ruby 语法糖 : dealing with nils - 2

    可能已经问过了,但我找不到它。这里有2个常见的情况(对我来说,在编程Rails时......)用ruby​​编写是令人沮丧的:"astring".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想找到的是比以下内容更好的替代方法:temp="astring".match(/abc(.+)abc/);temp.nil??nil:temp[1]简而言之,如果不匹配,则简单地返回nil而不会出错第二种情况是这样的:var=something.very.long.and.tedious.to.writevar=some

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. ruby - Ruby 语法糖有 "rules"吗? - 2

    我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐