语法

Posted SameS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语法相关的知识,希望对你有一定的参考价值。

注释

单行注释://

多行注释:/* */

文档注释:/** */

字面量

变量

关键字,标识符

进制

二进制 0B/0b

八进制 0

十六进制 0X/0x 开头

数据类型

long类型后面要加 L/l

float类型后面要加 F/f

long a = 23112879182738179L;
float b = 678.08f;

表达式的自动类型转换

强制类型转换

数据类型 变量2 = (数据变量)变量1、数据

int a = 20;
byte b = (byte)a;

 int i = 1500;
        byte j= (byte) i; //溢出

double m = 99.5;
        int n = (int) m;//丢掉小数部分

快捷键: Alt+Enter;

  • 强转可能造成数据丢失(溢出);
  • 浮点型强转整型,直接丢掉小数部分,保留整数部分返回

运算符

+,-,*,/,%。

Tips: 做除法时乘个1.0让int变Double

“+” 可以做连接符(字符串运算时);

自增自减运算符

赋值运算符

扩展的赋值运算符自带强制性类型转换;

关系运算符

逻辑运算符

三元运算符

运算符优先级

System.out.println(13>5 || 20>3 && 1>3);
// True

程序流程控制

分支Branch:If Switch结构

条件是区间,使用if,条件是值,使用switch。

switch格式更好,性能较好,代码优雅。

不用double是因为double计算值不精确。

循环结构Loop

For

优点:

减少代码重复编写,灵活控制程序执行。

批量生产数据

while

do-while

应用场景:抢票,先抢再判断。

死循环 Endlessloop

while是经典写法。

开发场景:服务器程序。

循环嵌套

跳转关键字

开发场景:

找数据用break直接结束;

找指定数据删除用continue;

随机数

数组

静态初始化数组

其中

”【“代表数组

”I“代表int ”D“代表double

”@“在哪个地址

”776ec8df“16进制地址信息

数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。

数组的访问:数组名【索引】

数组的长度:数组名.length

数组的最大索引=数组名.length-1 (前提是数组中存在数据)

快捷键:

  • 遍历:数组名.fori

  • 输出:数组名【索引】.sout

例:ages.fori

ages[i].sout

动态数组

业务场景:

动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景。(比如评委打分)

静态初始化:适合一开始就知道要存入哪些元素值的业务场景。(比如周一到周日的信息)

Java内存分配

引用类型变量里面存储的 是堆的地址值

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报错空指针异常:NullPointerException.

方法 Method

方法运行原理

Java的参数传递机制

  • 基本类型的参数传递是值传递

即在传输实参给方法的形参时,传输的是实参变量中储存的值的副本。

实参:方法内部定义的的变量

形参:定义方法时“(...)”中声明的参数。

形参和实参的区别和联系

\\1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

\\2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

\\3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

\\4) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

  • 引用类型的参数传递

引用类型的参数传输存储的地址值。

方法重载

一个类中,出现多个方法名称相同,但是他们的形参列表是不同的,那么这些方法就称为方法重载了。

应用场景:为处理一类业务,提供多种解决方案,此时用方法重载。

return关键字

return; 可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行。

break; 跳出并结束当前所在循环的执行。

continue; 结束当前所在循环的当此继续,进入下一次执行。

面向对象

this关键字

this就是一个变量,可以用在方法中,来拿到当前对象。(哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象)。

this应用场景:

主要用来解决:变量名称冲突问题。

即解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的。

this可以 指定访问当前对象的成员变量。

即给成员方法自动加了一个 this参数。来调用对象

关于this关键字的使用:

1、this的单独使用:

(1)每实例化一个对象就会实例化一个this。

(2)this是一个对象中隐藏的引用变量,它保存了当前对象的内存地址,指向自身。

(3)this存储在堆内存当中对象的内部。

(4)this只能使用在实例方法中。谁调用这个实例方法,this就是谁。显然静态方法中不能使用this,因为静态方法的调用不需要实例化对象的参与。

(5)this大部分时候可以省略,在实例方法中,或者构造方法中,为了区分实例变量与局部变量,这种情况下,this不能省略。

2、this()的使用:

新语法,如果当前的构造方法区调用另一个本类中的构造方法时,可以使用this(参数列表),也就是当前构造方法的代码和被调用的构造方法里的代码类似时,在当前构造方法中使用this(参数列表),实现代码复用。

注意:在构造方法,this()只能出现的第一行,并且每个构造方法中最多只能有一个this()。
————————————————
版权声明:本文为CSDN博主「pipizhen_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pipizhen_/article/details/107164439

构造器

构造器的特征:

  • 它具有与类相同的名称
  • 它不声明返回值类型(与声明为void不同)
  • 不能被static、final、synchronized、abstract、native修饰,不能有return返回语句

构造器的作用:

创建对象;给对象进行初始化

语法格式

修饰符 类名(参数列表)初始化语句;

封装

面向对象的三大特征:封装、继承、多态;

封装:

就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,已经处理这些数据的方法,设计到一个对象中去。

封装的设计规范:

合理隐藏、合理暴露;

修饰符:public 、private

实体JavaBean(实体类)

实体类:一种特殊形式的类。

定义:

  • 这个类中的成员变量都要私有,并且要对外提供相应的getXxx,setXxx方法
  • 类中必须要有一个公共的无参的构造器。

特点:用来保存某个事物的数据。

应用场景:

实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和业务数据处理相分离。

成员变量(field)与局部变量的区别

常用API接口

包:分门别类管理各种不同的程序

语法格式

package com.SameS.javabean;
public class Student
    

在自己程序中调用其他包下的程序的注意事项

  • 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用
  • 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问!导包格式:import 包名.类名;
  • 如果当前程序中,要调用Java提供的程序,也需要先导包才可以使用;但是Java.lang包下的程序是不需要我们导包的,可以直接使用。
  • 如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。

String

概述:

  • 可以用来创建对象封装字符串数据,并对其进行处理。
  • 方式一:直接使用双引号 "..."。
  • 方式二:new String类,调用构造器初始化字符串对象。
String s1 = "luo";

String s2 = new String();

String s3 = new String("SameS");

char[] chars = \'a\',\'luo\',\'wen\';
String s4 = new String(chars);

byte[] bytes = 97,98,99;
String s5 = new String(bytes);
// s5==abc;

String 常用方法

String 注意事项
  • String对象的内容不可改变,被称为不可变字符串对象。
  • 只要是以 "..." 方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只储存一份;
  • 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。

ArrayList 集合

数组定义完成并启动后,长度就固定了。集合大小可变。

ArrayList是集合中常用的一种,Array List是泛型类,可以约束存储的数据类型。

怎么使用:

创建对象,调用无参数构造器初始化对象:public ArrayList();

调用相应的增删改查的方法

开发中例如购物车

要求:

创建对象

增删改查的方法

其他特点

常用方法:

从集合中遍历元素,并筛选出元素删除它,应该如何操作才能不出bug?

  • 方法一:每次删除一个数据后,索引-1;
  • 方法二:从集合后面比哪里然后删除,可以避免漏掉元素。

arrays类

java.util.Arrays

Arrays类中的方法都是Static 修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用。

功能:

  • 给数组赋值:fill
  • 对数组排序:sort
  • 比较数组:equals
  • 查找数组元素:binarySearch 二分法搜索
  • 打印数组:toString

Python 都有哪些好玩的语法糖?

参考技术A

什么是语法糖?

很多人在Python语法糖相关的问题,但是估计其中有不少同学甚至都不知道语法糖是什么概念。

其实,它并没有那么高大上,如果你跟着正常的学习链路把一门编程语言的语法学会,可能你日常开发过程中已经用到了很多语法糖。

在正式回答问题之前,我觉得有必要先解释一下什么是语法糖。

语法糖(Syntactic sugar),由英国计算机科学家Peter J. Landin于1964年提出,简单来说,语法糖是指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

引用维基百科上的一个例子:

举一个比较常见的for循环的例子:

满足同样的功能和效果,我们可以通过while来实现:

这就是一个简单的语法糖。

由此可见,语法糖并不是什么高大上的东西,可能我们现在开发中已经用了很多Python语法糖。

除此之外,语法糖还派生出一些词汇。例如,语法盐(syntactic salt),指的是不容易写出坏代码的语法特性。语法糖精(syntactic saccharine),或者说语法糖浆(syntactic syrup),指的是未能让编程更加方便的附加语法。

花了很大功夫来解释什么是语法糖,为的就是让大家更加容易理解、循序渐进,而不是上来就罗列一堆语法糖,很多基础薄弱的同学不明所以。

讲完语法糖的概念,接下来就介绍一些Python中那些好玩的语法糖。

魔法方法(Magic methods),有时也被称为特殊方法,是一种具有预定义名称的方法,其特征是在开头和结尾处有双下划线,例如, init

它们之所以是 "魔法",是因为这些方法是间接调用的,你不需要直接调用它们,一切都在背后完成。

例如,当你实例化一个类 x = MyClass() 时,Python 将调用 new init 进行构造或者初始化。

举一个简单的打印字符串的例子:

其实它间接的调用了背后的魔法方法,我们可以来试一下:

可以看出, repr 其实就是绑定到知名的print()方法上了。

除此之外,还有很多常用的魔法方法和我们常用的操作效果相同的:

装饰器是典型的Python语法糖,通过装饰器的使用,可以让Python语法格外简洁,而且可读性也很高。

比如,我现在写了3个函数,并且要统计3个函数的执行时间。

按常规的需要这样写:

这样不仅麻烦,而且有很多冗余代码。

这时候,我们就可以实现一个计时的装饰器,并且在每个函数上通过@装饰器名>来调用:

除此之外,装饰器还有很多妙用,感兴趣的同学可以看看我的另外一篇文章:

如果对装饰器的基本概念和用法不清楚,我之前也写过一篇非常受欢迎的回答,需要的也可以看一下:

开发过程中经常会用到比较运算符,比如,要判断一个变量是否在一个区间内,很多语言需要这样写:

在Python中,可以这样写:

这样更符合我们日常使用习惯,也更容易理解。

如果有一个列表或者字典,该如何遍历?

很多同学估计都会这样做:

在Python中,可以用更简洁的方法实现,一行代码就够了:

假如有这么一个数字:

这是多少?

估计很多人开始逐个数零了。

如果接触过财务或者会计的同学应该知道,有一种千位数字分割样式,这样更便于读取和理解。

在Python中,它提供了一种语法糖可以这样表示

这种效果和上面这种一样,但是更加容易理解和读取。

可以验证一下:

除了上面这些,Python在字符串、列表、函数等方面还有很多语法糖。

总之,语法糖的目的就是让程序更加简洁,有更高的可读性。这和我们编程过程中一直坚持的思想是一直的,实现一项功能的方法有很多,但是,我们一直在努力让代码具有更优秀的扩展性、阅读性、简洁性。除了语法糖,我们也可以通过养成良好的编程习惯、学习设计模式等方式来优化我们的代码。

以上是关于语法的主要内容,如果未能解决你的问题,请参考以下文章

Python 都有哪些好玩的语法糖?

3.1语法分析-语法分析简介

3.1语法分析-语法分析简介

什么是语法糖?

编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理

Kibana 搜索语法