语法
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在字符串、列表、函数等方面还有很多语法糖。
总之,语法糖的目的就是让程序更加简洁,有更高的可读性。这和我们编程过程中一直坚持的思想是一直的,实现一项功能的方法有很多,但是,我们一直在努力让代码具有更优秀的扩展性、阅读性、简洁性。除了语法糖,我们也可以通过养成良好的编程习惯、学习设计模式等方式来优化我们的代码。
以上是关于语法的主要内容,如果未能解决你的问题,请参考以下文章