Java-基础

1.变量与数据类型

1.1 标识符

Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。

命名规则如下:

  • 由字母、数字、下划线(_)和美元符号($)组成。
  • 不能以数字开头。
  • 区分大小。
  • 长度无限制。
  • 不能是Java中的保留关键字。

标识符命名习惯:

  • 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
  • 方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
  • 变量名规范: 首字母小写,后面每个单词首字母大写。

命名规范参考Java开发手册(嵩山版)

  1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / name / n a m e / n a m e / n a m e name / name_ / name name/name/name / name
  2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。 正例:ali / alibaba /
    taobao / cainiao/ aliyun/ youku / hangzhou 等国际通用的名称,可视同英文。
    反例:DaZhePromotion [打折] / getPingfenByName() [评分] / String fw[福娃] / int
    某变量 = 3
  3. 【强制】代码和注释中都要避免使用任何语言的种族歧视性词语。 正例:日本人 / 印度人 / blockList / allowList / secondary 反例:RIBENGUIZI / Asan / blackList / whiteList / slave
  4. 【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。 正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal /
    TaPromotion 反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal
    / TAPromotion
  5. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格。 正例: localValue / getHttpMessage() / inputUserId

1.2关键字

Java中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword)。全部是小写,例如:
在这里插入图片描述

1.3 进制

1.3.1 二进制

  • 计算机中的数据都以二进制数字保存。
  • 二进制:逢二进一。即只有0、1两个值。
    如:十进制的10在计算机内保存为二进制的1010
  • 计算机中信息的存储单位
    位(Bit):表示一个二进制数码0或1,是计算机存储处理信息的最基本的单 位。
    字节(Byte):一个字节由8个位组成。它表示作为一个完整处理单位的8个二进制数码。
    字:32位计算机:1字=32位=4字节,64位计算机:1字=64位=8字节

1.3.2 十六进制

二进制表示法太冗长,所以在程序中一般喜欢用十六进制。
十六进制:基数为十六,逢十六进一。它用abcdef表示从0-9之上的值。
Java中十六进制数据要以0x或0X开头。如:0x23D
十六进制转换成二进制只需将每个十六进制数字替换为相对应的四个二进制位即可。

1.3.3 八进制

八进制:基数为八。
Java中八进制数据要以0开头。如:0123
八进制转换成二进制:只需将每个八进制数字替换为相对应的三个二进制位即可。
现在的计算机系统很少用八进制的了。

1.3.4 原码、反码、补码

  1. 原码
    十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负。
    例如:56 -> 0 0 1 1 1 0 0 0
    左边第一位为符号位,其他位为数据位。
    一个 byte 有 8bit,最大值是 0 1 1 1 1 1 1 1 (+127),最小值是 1 1 1 1 1 1 1 1 (-127)
    在计算机中之所以使用二进制来表示原码是因为逻辑简单,对于电路来说只有开或者关两种状态,用二
    进制是在方便不过的了。如果使用的进制是十进制、八进制或者十六进制的话,电路没有办法表示那么
    多的状态

【+1】= 原:[ 0000 0001 ]
【-1】= 原:[ 1000 0001 ]

  1. 反码
    正数的反码是其本身(等于原码),负数的反码是符号位保持不变,其余位取反。
    反码的存在是为了正确计算负数,因为原码不能用于计算负数

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]
【-1】 = 原:[ 1000 0001 ] = 反:[1111 1110 ]

  1. 补码
    正数的补码是其本身,负数的补码等于其反码 +1。
    因为反码不能解决负数跨零(类似于 -6 + 7)的问题,所以补码出现了。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ] = 补:[ 0000 0001 ]
【-1】 = 原:[1000 0001 ] = 反:[ 1111 1110 ] = 补:[ 1111 1111 ]

1.4 数据类型

1.4.1 基本数据类型

程序处理的都是数据,由于不同数据的内容大小不同, 导致所需的存储单元大小不同,在Java语言中使用
数据类型的概念加以描述 。
字节是计算机技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构
成信息的一个小单位。Java中的字节是八位的字节,即它包含八位的二进制数。
8种基本数据类型:

在这里插入图片描述

1.4.2 基本数据类型转换

  • 自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再
    进行计算。
    在这里插入图片描述

  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。

  • boolean类型不能与其它数据类型运算。

  • 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。

1.4.3字符串类型:String

String不是基本数据类型,属于引用数据类型
使用方式与基本数据类型一致。例如:String str = “abcd”;
一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。

1.4.4 强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换
符:(),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成
基本类型。
boolean类型不可以转换为其它的数据类型。

1.5 变量

1.5.1 定义

变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。简单理解就是内存中一块空间的
表示。
由于该存储单元中的数据可以发生改变,因此得名为"变量"。

1.5.2 声明变量

1.5.2.1 方式1:先声明变量后赋值

语法:数据类型 变量名称;

 int n;
 n=12;
1.5.2.1 方式2:声明变量的同时赋初值

语法 : 数据类型 变量名称=值;

int n = 12;

1.5.3 变量的使用

package lina;
/*
* 变量的声明与使用
*/
public class Demo02_var {
public static void main(String[] args) {
//1、声明变量
//1.1 先声明后赋值:数据类型 变量名称;
int age;//声明
age=18;//赋值
//1.2 声明变量的同时赋初值:数据类型 变量名称=初值;
double money=1000.0;
//2、变量的使用:先声明并赋值之后才能使用
System.out.println("年龄是:"+age);
System.out.println("私房钱有:"+money);
//System.out.println(name);//错误 没有声明
//其他类型的变量
float num=12.5F;//小数点的数字默认是double类型,如果赋值给float,需要在值后面
加上后缀f 大小写都OK
long num2=100L;//整数数字默认是int类型,long类型的 变量的值后面可以添加L后
缀,也可以省略(省略的时候暗含类型转换,但是不能超过int的范围,否则不能省略)
char gender='男';//字符类型的值必须使用单引号引起来
String str="我爱你中国";//字符串类型的值必须使用双引号引起来
System.out.println(num);
System.out.println(num2);
System.out.println(gender);
System.out.println(str);
}
}

1.5.4 控制台输入

通过Scanner帮我们实现键盘输入

Scanner使用格式

import java.util.Scanner;
public class HomeWord1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入需求和的数字个数");
        int n = sc.nextInt();
        
        System.out.println("请输入计算的表达式");
        String m = sc.next();

Scanner 是java中包装好的类,可以直接调用类当中的方法来实现键盘的输入,而Scanner是java.util 包中的一个类,所以使用Scanner之前要先调用存放它的包(调用方法:import java.util.Scanner;),想要调用Scanner类中的方法,就要先创建对象(java是一门面向对象的语言),创建对象(即new对象):Scanner sc = new Scanner(System.in);然后就可以通过 对象名.方法名 即 int n = sc.nextInt();的方式调用该方法实现用户的输入,可以在输入之前打印一个提示用户需要输入的信息System.out.println(请输入需要求和的数字个数)。

1.5.5 变量分类

  • 基本数据类型变量
  • 引用数据类型变量
  • 按被声明的位置划分:
    • 局部变量:方法或语句块内部定义的变量
    • 成员变量:方法外部、类的内部定义的变量在这里插入图片描述

2.运算符

2.1 算术运算符

在这里插入图片描述
++: 如果是变量前缀:先对此变量加1,再执行其他的操作。
如果是变量后缀:先执行当前语句的其他操作,再对此变量加1
–: 如果是变量前缀:先对此变量减1,再执行其他的操作。
如果是变量后缀:先执行当前语句的其他操作,再对此变量减1

2.2 赋值运算符

赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左
在这里插入图片描述

2.3关系运算符

关系运算符作用是比较两边的操作数,结果总是boolean型的。
在这里插入图片描述

2.4逻辑运算符

逻辑运算符用于对boolean
型结果的表达式进行运算,运算结果总是boolean型,后面结合条件结构讲解。
在这里插入图片描述

public static boolean f1() {
System.out.println("f1");
return false;
}
public static boolean f2() {
System.out.println("f2");
return true;
}
public static void main(String[] args) {
//不短路&,前面表达式false,后面表达式依然执行
System.out.println(f1() & f2()); //true
}
//结果
f1
f2
false

	

public class Test9 {
public static boolean f1() {
System.out.println("f1");
return false;
}
public static boolean f2() {
System.out.println("f2");
return true;
}
public static void main(String[] args) {
//不短路&,前面表达式false,后面表达式依然执行
System.out.println(f1() && f2() && f2() && f2()) ; //true
}
//结果
f1
false
短路与,前面的表达式false,fasle后面的表达式不再执行

2.5 字符串连接运算符

String s="He" + "llo";//结果"Hello"
//"+"除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。
//如:
String s="x" + 123;// 结果"x123"

2.6 三目运算符

X ? Y : Z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则整个运算
结果为表达式z的值。

//例:
int score = 75;
String type = score >=60 ? "及格" : "不及格";

2.7位运算符

位运算符对两个操作数中的每一个二进制位都进行运算
位运算符功能:
按位取反 ~
按位与 &
按位或 |
按位异或 ^
在这里插入图片描述

移位运算符
左移:"a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0
带符号右移:"a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
无符号右移:"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0
在这里插入图片描述

计算2^3最快方式,使用移位运算符
2 << 2

2.8 操作符优先级

在这里插入图片描述

3.程序的流程控制

3.1顺序结构

顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作。

在这里插入图片描述

3.2 分支结构

分支结构又被称为选择结构,根据条件成立与否来执行操作。

3.2.1 if选择结构


if(条件){
条件成立执行的内容
}

在这里插入图片描述
执行流程:
1.首先计算判断条件的结构
2.如果条件的结构为true 就执行与具体
3.如果条件为false就不执行语句体

3.2.2 if-else选择结构

if(条件){
条件成立执行的内容
}else{
条件不成立执行的内容
}

在这里插入图片描述

3.2.3多重选择结构

if(条件1){
//条件1成立的时候执行的条件
}else if(条件2){
//条件1不成立,条件2成立的时候执行的条件
}else if(条件3){
//条件1、2不成立,条件3成立的时候执行的条件
}......
else if(条件n){
//条件1到n-1不成立,条件n成立的时候执行的条件
}else{
//当以上的所有条件都不成立的时候执行的代码
}
/*
整个结构是一个整体,当一个条件成立并执行之后,整个结构就已经执行完毕;
if块必须有;
else if块可以有一个,也可以有多个;
else 可以有一个,也可以没有。

在这里插入图片描述

public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入你的分数:");
int score=input.nextInt();
if(score>700) {
System.out.println("去清华");
} else if (score >= 600/* &&score<=700 */) {
System.out.println("重点本科");
}else if (score >= 500/* &&score<=600 */) {
System.out.println("普通本科");
} else if(score>=300) {
System.out.println("专科");
}else {
System.out.println("其他出路!");
}
}

3.2.4 switch选择结构

switch(表达式){
case 值1://相当于if(){}
//满足表达式的结果==值1的时候执行的代码
break;//退出当前的switch选择结构
case 值2://相当于else if(){}
//满足表达式的结果==值2的时候执行的代码
break;
......
case 值n:
//满足表达式的结果==值n的时候执行的代码
break;
default://相当于else
//以上的匹配都失败的时候执行的内容
break;
}
/*
表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直
接往下面执行!
Case后面的执行体可写{ }也可以不写{ }
*/

在这里插入图片描述
案例

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 基金经理的业绩排名:1、欧洲游 2、东南亚游 3、国内游 其他:再接再厉!
System.out.println("请输入你的排名:");
int num = input.nextInt();
// 方式2:
switch (num) {// 小括号中的表达式或者变量结果类型可以是:int char String
byte short
case 1:// 相当于if(num==1){}//case 后面的值必须是常量 'A' "星期一"
System.out.println("奖励是:欧洲游");
break;// 执行完毕一个case分支后跳出switch语句块
case 2:// 相当于if(num==2)
System.out.println("奖励是:东南亚游");

break;
case 3:// 相当于if(num==3)
System.out.println("奖励是:国内游");
break;
default:// 相当于else ,是可选的
System.out.println("再接再厉");
break;
}
// 方式1:
/*
if (num == 1) {
System.out.println("奖励是:欧洲游");
} else if (num == 2) {
System.out.println("奖励是:东南亚游");
} else if (num == 3) {
System.out.println("奖励是:国内游");
} else {
System.out.println("再接再厉");
}
*/
}
2.2.4.1 巧用break

将结果一样的条件都放在一起,省略break
案例:月份输出天数,将天数相同的都放在一起


public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 根据用户输入的月份,输出当月的天数,不考虑平年闰年
System.out.println("请输入月份:");
int month = input.nextInt();
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "月共有31天!");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "月共有30天!");
break;
case 2:
System.out.println(month + "月共有28天!");
break;
default:
System.out.println("您输入的月份有误!");
break;
}

3.2.5 字符串比较

  • ==比较内存地址
  • equlas比较内容
String str1="abc";
String str2=input.next();
## 键盘输入abc
System.out.println(str1==str2);
System.out.println(str1.equlas(str2))

==输出结果为false,str1和str2 内存不同
.equlas输出结果为true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值