文章目录
注释
又又又来到学习新语言的第一课注释。
java的注释有三种
注释名称 | 写法 | 快捷键 | 作用 |
---|---|---|---|
单行注释 | // | ctrl + / | 注释单行 |
多行注释 | /* */ | ctrl + shift + / | 注释多行 |
文档注释 | /* * */ | 输入 /** + Enter | 说明方法/类的作用 。一般用在类、方法、成员变量上,且在其上的注释内容会被提取到程序说明文档中去 |
使用通义灵码写注释。
使用通义灵码再也不怕屎山代码了
选中你要注释的代码,右击选择
然后点击插入
生成注释如下
/**
* 包名: com.itheima.comment
* 该包下可能包含与注释相关的类或接口
*/
package com.itheima.comment;
/**
* 类名: Comment
* 该类包含程序的入口点,用于演示或测试某些功能
*/
public class Comment {
/**
* 主函数: 程序的入口点
* 该方法主要用于打印一个简单的字符串到控制台
* @param args 命令行参数,本方法中未使用
*/
public static void main(String[] args) {
// 打印字符串 "Sefhuk" 到控制台
System.out.println("Sefhuk");
}
}
字面量
字面量:就是程序中能直接书写的数据,学这个知识的重点是:搞清楚Java程序中数据的书写格式。
字面量的分类
public class LiteralDemo {
public static void main(String[] args) {
printLiteral();
}
public static void printLiteral() {
// 1、整型字面量,直接写
System.out.println(1);
// 2、浮点型字面量,直接写(小数)
System.out.println(1.0);
// 3、布尔型字面量,只有true false
System.out.println(true);
System.out.println(false);
// 4、字符型字面量,用单引号括起来,里面有且仅有一个字符
System.out.println('a');
System.out.println('豪');
// System.out.println('徐磊'); // 报错
System.out.println(' ');
// System.out.println('');// 报错
// 掌握一些特殊的字符:\n(换行功能) \t(Tab缩进功能)
System.out.println("hello\nWorld");
System.out.println("hello\tWorld");
// 5、字符串字面量,用双引号括起来,里面可以有任意字符
System.out.println("aaa");
System.out.println("");
System.out.println(" afsfa");
System.out.println("我爱你中国666abc");
}
}
变量详解
认识变量
变量就是内存中的一块区域,可以理解成一个盒子,用来装程序要处理的数据的。
语法
int age = 18;
数据类型 变量名称 = 数据;
为什么要用变量记数据?答:使用变量记要处理的数据,编写的代码更灵活,管理代码更方便。
变量有啥特点?
变量里装的数据是可以被替换的。
int age = 18; age = 19;
System.out.println(age); // 19
age = age + 1;
System.out.println(age); // 20
变量有啥应用场景呢?答:写程序对数据进行处理就很方便了。
使用变量的几点注意事项
- 变量要先声明才能使用
- 变量是什么类型,就必须装什么类型的数据
- 变量是从定义开始到“}”截止的范围内有效
- 同一个范围内,变量的名称不能一样
- 变量定义的时候可以不赋初始值;但在使用时,变量里必须有值。
变量里数据的存储原理
二进制
计算机中表示数据的最小单元
数据在计算机中的最小储存单元: 字节(byte,简称B)是,一个字节占8个比特位(bit,简称b),因此1B=8b
在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
字符数据在计算机如何存储
ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。
图片数据是如何存储的
图片就是无数个像素点组成的
每个像素点的数据:用0 ~ 255255255表示其颜色
声音数据是如何存储的
总结
数据在计算机底层都是怎么存储的?
答:都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储。
如何快速的算出一个数据的二进制形式?
答:除二取余法
计算机底层表示数据的最小单元是什么?
答:字节,一个字节等于8个二进制位:1B=8b
字符数据在计算机中是怎么存的?
答:
- 字符存的是ascii码表中对应的数字的二进制形式。
- 字符’A’对应的数字是 65
- 字符’a’对应的数字是 97
- 字符’0’对应的数字是 48
图片和音视频等文件的数据是怎么存储的啊?
答:也是采用二进制进行存储的。
进制转换
这里不在过多赘述有兴趣的人可以了解一下。
Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。
十六进制:最小数是0,最大数是15,共16个数字,依次用: 0~9 A B C D E F 代表就是十六进制。
数据类型
分为两大类:基本数据类型,引用数据类型。
基本数据类型:4大类8种。
数据类型 | 内存占用(字节数) | 数据范围 | |
---|---|---|---|
整型 | byte | 1 | -128~127 |
short | 2 | -32768~32767 | |
int(默认) | 4 | -2147483648~2147483647 (10位数,大概21亿多) | |
long | 8 | -9223372036854775808 ~ 9223372036854775807**(19位数)** | |
浮点型(小数) | float | 4 | 1.401298 E -45 到 3.4028235 E +38 |
double(默认) | 8 | 4.9000000 E -324 到1.797693 E +308 | |
字符型 | char | 2 | 0-65535 |
布尔型 | boolean | 1 | true,false |
引用数据类:String
关键字,标识符
关键字
Java语言自己用的一些词汇,有特殊作用的,称之为关键字, 如:public、class、int、double…
注意:关键字是java用了的,我们就不能用来为做为自己的:类名、变量名,否则会报错!
java的关键字很多不需要刻意去记忆。
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
标识符
标志符就是名字(如类名、变量名…都是标识符)。
注意:取名字是有规则的
- 一般由数字、字母、下划线(_)和美元符($)等组成
- 不能以数字开头,不能是关键字,不能包含一些特殊字符(&、%、# …)
- 变量名:建议首字母小写,满足“驼峰模式”
- 类名:建议首字母大写,满足“驼峰模式”
例如
int studyNumber = 59;
HelloWorld、Student
方法
方法是什么
方法是一种用于执行特定任务或操作的代码块,代表一个功能,它可以接收数据进行处理,并返回一个处理后的结果。
方法的语法
修饰符 返回值类型 方法名( 形参列表 ){
方法体代码(需要执行的功能代码)
return 返回值;
}
public和static是方法的修饰符 返回值类型 方法名称 形参列表
public static int max (int a , int b){
int max = a > b ? a : b;
// 方法的执行代码(处理数据)
return max;
// 返回处理后的结果
}
方法必须被调用才能执行,调用格式:方法名称(数据)。
方法的其他写法
// 打印3行Hello World(使用方法):无参数无返回值的方法
public static void print(){
System.out.println("Hello World");
System.out.println("Hello World");
System.out.println("Hello World");
}
//如果方法不需要返回数据,返回值类型必须声明成void(无返回值声明)
// 方法内部不可以使用return返回数据
总结
什么是方法?方法的完整格式是啥?
答:是用于执行特定任务或操作的代码块,可以接收数据进行处理并返回一个处理的结
定义满足需求的方法格式,主要考虑哪两方面?
答:方法是否需要接收数据,方法是否需要返回数据。
方法如何使用?
答:必须进行调用才可以执行方法;调用格式:方法名称(…)。
方法的其他注意事项
1、方法可以重载。
一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。
public static void main(String[] args) {
printVariable(3);// 3
}
public static void printVariable(int a) {
System.out.println(a);
}
public static void printVariable(String str) {
System.out.println(str);
}
public static void printVariable(int a, String str) {
System.out.println(a);
System.out.println(str);
}
2、无返回值的方法中可以直接通过单独的return;立即结束当前方法的执行。
public static void printVariable(int a) {
System.out.println("a = " + a);
return;
}
类型转换
自动类型转换
什么是自动类型转换,为什么要进行自动类型转换?
答:类型范围小的变量,可以直接赋值给类型范围大的变量。
注意:char类型本质是数字,比如a在ascii中对应数字97
public static void main(String[] args) {
byte a = 4;
print(a);
}
public static void print(int b){
System.out.println(b);
}
自动类型转换在计算机中的执行原理如下
强制类型转换
什么是强制类型转换,为什么要进行强制类型转换?
答:类型范围大的变量, 不可以直接赋值给类型范围小的变量,会报错,需要强制类型转换过去
语法如下:
数据类型 变量2 = (数据类型)变量1、数据
public static void main(String[] args) {
int a = 20;
// 数据类型 变量2 = (数据类型)变量1、数据
byte b = (byte)a;
System.out.println(b); // 20
}
计算机中的执行原理如下
注意:强制类型转换可能造成数据(丢失)溢出;浮点型强转成整型,直接丢掉小数部分,保留整数部分返回
public static void main(String[] args) {
int i = 1500;
byte j = (byte)i;
System.out.println(j); // -36
}
计算机中的执行原理如下:
之所以为负数是因为数据溢出。
public static void main(String[] args) {
// 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回
double i = 15.4;
byte j = (byte)i;
System.out.println(j); // 15
}
表达式的自动类型提升
在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
表达式是指:x+5,x+y+9…等等。
注意事项:
表达式的最终结果类型由表达式中的最高类型决定。
在表达式中,byte、short、char 是直接转换成int类型参与运算的。
public static void main(String[] args) {
int result = calc2((byte) 110, (byte) 120);
System.out.println(result);// 230
int result2 = calc3((byte) 110, (byte) 120);
System.out.println(result2);// -26
}
// 返回值类型写int会报错
public static double calc(int a, int b, double c, char r) {
// 表达式的最终结果类型是有最高类型决定的
return a + b + c + r;
}
// 返回值类型写byte会报错
public static int calc2(byte a, byte b) {
// byte short char运算时会直接提升成int运算。
return a + b;
}
// 强转返回值类型写byte不会报错
public static byte calc3(byte a, byte b) {
byte c = (byte) (a + b);
return c;
}
输入输出
输出:把程序中的数据展示出来。System.out.println("Hello World!");
输入:程序读取用户键盘输入的数据。通过Java提供的 Scanner
程序来实现
Scanner是Java提供好的API,程序员可以直接调用
API (Application Programming Interface:应用程序编程接口)
Java写好的程序,咱们程序员可以直接拿来调用。
Java为自己写好的程序提供了相应的 程序使用说明书(API文档)。
下载API文档 ⇒ API
使用Scanner接收用户键盘输入的数据,需要三个步骤:
- 导包:告诉程序去JDK的哪个包中找扫描器技术
- 抄代码:代表得到键盘扫描器对象(东西)。
- 抄代码:等待接收用户输入数据。
注意:
System、String在JDK中的Java.lang包下
lang包不需要我们导包,是默认的包。
package com.itheima.scanner;
// 1. 导包: 告诉我们自己的程序,去JDK哪里找Scanner程序用
import java.util.Scanner;
public class ScannerDemo1 {
public static void main(String[] args) {
printUserInfo();
}
// 需求:我是一个零基础小白,请帮我写一个程序,
// 可以让用户键盘输入用户名和年龄,然后打印出来
public static void printUserInfo() {
// 2. 创建对象(抄写这一行代码,得到一个Scanner扫描器对象)
Scanner sc = new Scanner(System.in);
// 3. 获取用户输入
System.out.println("请输入用户名:");// 键盘输入:hsh
// 让程序在这一行暂停,等到用户输入一个字符串名称,
// 直到按了回车键之后,把名字交给变量username记住再往下走
String username = sc.next();
System.out.println("您叫:" + username);// 您叫:hsh
System.out.println("请输入年龄:");// 键盘输入:20
// 让程序在这一行暂停,等到用户输入一个整数,
// 直到按了回车键之后,把年龄交给变量age记住再往下走
int age = sc.nextInt();
System.out.println("您" + age + "岁。"); // 您20岁。
}
}
运算符
算数运算符、+符号做连接符
算数运算符 如下:
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 参考小学一年级 |
- | 减 | 参考小学一年级 |
* | 乘 | 参考小学二年级,与“×”相同 |
/ | 除 | 与“÷”相同,注意:在Java中两个整数相除结果还是整数。 |
% | 取余 | 获取的是两个数据做除法的余数 |
+符号在Java中的特殊用途:
- “+” 符号在有些情况下可以做连接符。
- “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
如何识别+符号是做运算,还是做连接:能算则算,不能算就连接在一起。
public static void main(String[] args) {
print(10, 3);
System.out.println("---------------------------------");
print2();
}
public static void print(int a, int b) {
System.out.println(a + b);// 13
System.out.println(a - b);// 7
System.out.println(a * b);// 30
System.out.println(a / b); // 3.3333... ==> 3
System.out.println((double) a / b);// 3.3333333333333335
System.out.println(1.0 * a / b); // 3.3333333333333335
System.out.println(a % b);// 1 因为 10/3 = 3 余 1
}
// 需求:研究+符号做连接符还是做运算符.
public static void print2() {
int a = 5;
System.out.println("abc" + a); // abc5
System.out.println(a + 5); // 10
System.out.println("hsh" + a + 'a'); // hsh5a
System.out.println(a + 'a' + "hsh"); // 102hsh
}
自增自减运算符
自增自减运算符如下:
符号 | 作用 |
---|---|
自增:++ | 放在某个变量前面或者后面,对变量自身的值加1 |
自减:– | 放在某个变量前面或者后面,对变量自身的值减1 |
注意:++ 、-- 只能操作变量,不能操作字面量的值。
例如System.out.println(10--);
报错
public static void main(String[] args) {
print(10);
System.out.println("=========================");
print2(10);
}
// 设计一个方法,接收一个整数。
public static void print(int a) {
a++; // a = a + 1;
++a;
System.out.println(a);// 12
a--;
--a;
System.out.println(a);// 10
}
// 设计一个方法,理解自增和自减放在变量前后的区别
public static void print2(int a) {
int b = a++; // 先用后加
System.out.println(a); // 11
System.out.println(b); // 10
int c = ++a; // 先加后用
System.out.println(a); // 12
System.out.println(c); // 12
}
下面来个扩展
int c = 10;
int d = 5;
int rs3 = c++ + ++c - --d - ++d + 1 + c--;
System.out.println(rs3);// 26
System.out.println(c);// 11
System.out.println(d);// 5
赋值运算符
就是“=”,从右边往左看。
int a = 10;
// 先看“=”右边,把数据10赋值给左边的变量a存储。
符号 | 用法 | 作用 | 底层代码形式 |
---|---|---|---|
+= | a+=b | 加后赋值 | a = (a的类型)(a + b); |
-= | a-=b | 减后赋值 | a = (a的类型)(a - b); |
*= | a*=b | 乘后赋值 | a = (a的类型)(a * b); |
/= | a/=b | 除后赋值 | a = (a的类型)(a / b); |
%= | a%=b | 取余后赋值 | a = (a的类型)(a % b); |
注意:扩展的赋值运算符隐含了强制类型转换。
关系运算符、三元运算符
关系运算符如下:
符号 | 例子 | 作用 | 结果 |
---|---|---|---|
> | a>b | 判断a是否大于b | 成立返回true、不成立返回false |
>= | a>=b | 判断a是否大于或者等于b | 成立返回true、不成立返回false |
< | a<b | 判断a是否小于b | 成立返回true、不成立返回false |
<= | a<=b | 判断a是否小于或者等于b | 成立返回true、不成立返回false |
== | a==b | 判断a是否等于b | 成立返回true、不成立返回false |
!= | a != b | 判断a是否不等于b | 成立返回true、不成立返回false |
判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。
注意:在java中判断是否相等一定是"==" ,千万不要把"== "误写成 “=”。
三元运算符
语法:条件表达式 ? 值1 : 值2;
执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
逻辑运算符
把多个条件放在一起运算,最终返回布尔类型的值:true、false。
符号 | 叫法 | 例子 | 运算逻辑 |
---|---|---|---|
& | 逻辑与 | 2 > 1 & 3 > 2 | 多个条件必须都是true, 结果才是true; 有一个是false,结果就是false |
| | 逻辑或 | 2 > 1 | 3 < 5 | 多个条件中只要有一个是true, 结果就是true; |
! | 逻辑非 | ! (2 > 1) | 就是取反:你真我假,你假我真。!true == false、!false == true |
^ | 逻辑异或 | 2 > 1 ^ 3 > 1 | 前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true |
符号 | 叫法 | 例子 | 运算逻辑 |
---|---|---|---|
&& | 短路与 | 2 > 10 && 3 > 2 | 判断结果与“&”一样,过程不同:左边为 false,右边则不执行。 |
|| | 短路或 | 2 > 1 | | 3 < 5 | 判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。 |
开发一般使用 && 和 ||
综合小案例
开发一个简单的健康计算器应用程序,它可以接受用户的输入(如年龄、性别、体重、身高),并计算出用户的BMI(身体质量指数)和基础代谢率(BMR)。
package com.itheima.demo;
import java.util.Scanner;
public class AllTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 1、先让用户输入自己的个人信息:身高、体重、性别、年龄
System.out.println("请您输入您的身高:");
double height = sc.nextDouble();
System.out.println("请您输入您的体重:");
double weight = sc.nextDouble();
System.out.println("请您输入您的性别(男/女):");
String sex = sc.next(); // "男"
System.out.println("请您输入您的年龄:");
int age = sc.nextInt();
double bmi = calcBMI(height, weight);
System.out.println("您的bmi值是:" + bmi);
// 判断用户的bmi值的情况。。。
double bmr = calcBMR(height, weight, sex, age);
System.out.println("您的bmr值是:" + bmr);
// 判断bmr的情况。。。
}
// 2、根据个人信息,计算BMI指数(把数据交给一个独立的方法来计算并返回这个结果)
public static double calcBMI(double height, double weight) {
return weight / (height * height);
}
// 3、根据个人信息,计算BMR指数(把数据交给一个独立的方法来计算并返回这个结果)
public static double calcBMR(double height, double weight, String sex, int age) {
double bmr = 0;
if ("男".equals(sex)) {
bmr = 88.362 + (13.397 * weight + 4.799 * height - 5.677 * age) ;
} else {
bmr = 447.593 + (9.247 * weight + 3.098 * height - 4.330 * age);
}
return bmr;
}
}