java标识符和方法

关键字

​ Java提供的具有特殊意义的单词。


标识符:

​ 给类、接口、方法、变量取名字时使用到的字符序列。

public class 类名(标识符){
    public static void 方法名(标识符)(String[] 变量名(标识符)){
        
    }
}

组成部分:大小写字母、数字、$、_、中文

注意:

  1. 区分大小写(Java对大小写敏感)
  2. 不能以数字开头
  3. 不能使用除了**$、_**以外的特殊符号
  4. 不能用Java的关键字
  5. 不要使用中文(考虑到编码格式,GBK一个中文字符占两个字节,UTF-8一个中文字符占三个字节)

变量:

变量:

变量包含:变量名,变量的值,变量类型

​ 变量:在程序执行过程中,可以发生改变的量(变量是存储单个数据的容器)。

变量的声明:

​ 数据类型 变量名[=值];

​ 数据类型 变量名;//变量声明

​ 数据类型 变量名=值;//变量声明和赋值

int age;//声明int型变量
age=18;//变量age的赋值
char char1='r';//声明char类型的变量并赋值

注意:

​ 1."="号为赋值号,将等号右边的值赋值给左边的变量。

​ 2.[]号里面的值声明时,可写可不写。

变量的注意事项:

​ 1.在同一个作用域中,变量名是不可以重复的。

​ 2.变量没有初始化就不能使用。

​ 3.变量名不可以时Java中的关键字。


转义字符:

转义字符

转义字符:具有特殊意义的字符本身。

\"表示一个双引号字符。

\'表示一个单引号字符。

\\ 表示一个斜杠字符。

\n表示换行。

\t表示水平制表。

常量

常量

常量:在程序执行过程中不可发生改变的量

常量分类:

  1. 数字字面量:程序中出现的数字

    ​ 整数数字默认int类型
    ​ 小数数字默认double类型

  2. 字面值常量:双引号括起来的内容

    ​ ps:“今天真是美好的一天”

  3. final(最终的)修饰变量(不能重新赋值)

    final int NUM = 100;
    	System.out.println(NUM);//100
    

数据类型:

在这里插入图片描述

注意:

​ 1.数字字面量:程序中出现的数字:

​ 整数数字默认int类型,则long类型的值后面加L或l,来区别int类型。

​ 小数数字默认double类型,则float类型的值后面加F或f,来区别double类型。

​ 2.字节(byte)为计算机存储的最小单位。1字节等于二进制中的8位(bit/比特)。

​ 3.二进制位数中,从右往左,数位递增。最左边为最高位,最右边为最低位。

​ 4.二进制中,在有符号类型中,最高位为符号位,0表示正数,1表示负数。

​ 5.数据类型的取值范围:byte<short<int<long<float<double

​ 6.字符类型只能有一个字(使用单引号,而双引号表示为字符串)。

​ 7.布尔类型:只有两个值(true/false),两个极端。

基本数据类型:

数值类型:
整数类型:

byte:字节型,1字节,8位。

byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);

byte类型取值范围:-128~+127(10000000-01111111)

在这里插入图片描述

short:短整型,2字节,16位(1000000000000000-0111111111111111)

short a=10;
short b=20;
short c=a+b;
System.out.println(c);

int:整型,4字节,32位。

int取值范围:-2147483648~2147483647

int a=10;
int b=20;
int c=a+b;
System.out.println(c);

long:长整型,8字节,64位。是高精度数据类型,整数后加L或l来区别于int数据类型。

long number;
number=123456789l;
long rum=-987654321L;
浮点类型:

double:双精度浮点类型,8字节,64位。小数后面可加可不加D或d。

double x=1.23;
double 7=2.34d;

float:单精度浮点类型,4字节,32位。小数后面加F或f来区别于double数据类型。

float x=2.45f;

在这里插入图片描述

字符类型:

char :2字节,16位。 用于存储单个字符,使用单引号’ '引出字符。

char取值范围:0~65535(没有负数)

char c='a';
char b='你';
布尔类型:

boolean: 4字节,32位。 只有true和false两个值,分别代表布尔逻辑中的“真”和“假”。

boolean占4个字节,Java虚拟机规范中指出JVM底层没有描述boolean值的指令,底层是使用int类型来描述boolean值。

boolean b=false;

引用数据类型:数组,类,接口,枚举

在其他文档里啦!

基本数据类型的转型:

基本数据类型的取值范围:byte<short<int<long<float<double

自动转型:

​ 向上转型,取值范围小的 转为 取值范围大 的。

//依次向上转型
byte b=10;
short s=b;
int i=s;
long l=i;
float f=l;



//直接将byte类型转型成double类型
byte b=10;
float f=b;

强制转型:

​ 向下转型,取值范围大的 转为 取值范围小的。

double d=123.123;
//1.将double类型的数据强制转型成float类型的数据   
//2.将转型后的数据赋值给float类型的f变量
float f=(float)d;
long l=(long)f;//会把小数部分舍弃

注意:

1.强制转型是从最高位开始舍弃(比如:int数据转为byte类型,高位先舍弃)。
特殊点:

案例一:

//强制转型是从最高位开始舍弃
byte b1 = 1;//1为int类型的数字字面量,但是1在byte类型的取值范围内,就直接赋值
//byte b2 = 128;//128为int类型的数字字面量,但是128不在byte类型的取值范围内,就会报错		

//超出数据类型的取值范围必须强制转型(强制转型从最高位开始舍弃)
//128 为 int类型:0000,0000,0000,0000,0000,0000,1000,0000
//强制转型后byte类型为:1000,0000
byte b2 = (byte)128;
System.out.println(b1);//1
System.out.println(b2);//-128

案例二

int i = 12345678901;//12345678901为int类型的数字字面量,但是该数字超过了int类型的取值范围,所以会报错

int i = (int) 12345678901L;//12345678901设为long类型的数字字面量,再强制转型为int类型后赋值给int类型i变量,但是会失去精度

案例三

long l1 = 12345678901;//12345678901为int类型的数字字面量,但是该数字超过了int类型的取值范围,所以会报错
long l2 = 12345678901L;//12345678901L为long类型的数字字面量,该数字没有超过long类型的取值范围,所以不会报错

案例四

float f1 = 1;//int -> float ,自动转型
//float f2 = 1.0;//double -> float ,强制转型

float f2 = (float)1.0;
//解决方案一:1.0为double类型,底层会开辟8字节的空间,然后再强制转型成float(4字节的空间),可能会损失精度,并且空间浪费,效率较低

float f2 = 1.0f;
//解决方案二:JVM直接认为1.0就是float类型去开辟4个字节的空间
System.out.println(f1);
System.out.println(f2);


案例五

char c = 'a';//Unicode - 97
int i = c;
System.out.println(i);//97

方法

方法:特定功能的代码块(减少了代码的冗余)。

分类:

  1. 无参数无返回值的方法
  2. 带参数的方法
  3. 带返回值的方法

注意:

  1. 参数是方法调用时传入的数据。
  2. 返回值是方法执行完毕后返回的数据。
  3. 无返回值的方法用viod关键词。

无参数无返回值的方法

语法结构:

public static void 方法名(){
    ...代码块...
}

注意:

  1. void表示无返回值,该方法执行完毕后不会返回数据
  2. 方法必须在主方法内被调用才能运行。
public class Test{
    public static void main(String[] args){
		
		//调用静态方法
		Test.run();
        //在同一个类中也可以直接调用静态方法
		play();
	}
	
	public static void run(){
		System.out.println("跑的方法 -- 500行");
	}
	
	public static void play(){
		System.out.println("发技能的方法 -- 1200行");
	}
}

注意:

​ 1. static表示该方法为静态方法,静态方法直接使用类名调。

带参数的方法

语法结构:

public static void 方法名(参数列表){
    ...代码块...
}

注意:

  1. 形式参数-形参:方法声明时设置的参数(形参必须设置类型,多个形参使用逗号分隔)
  2. 局部变量表示方法里的变量,其作用域只能在方法中使用(形参也是局部变量)
  3. 实际参数-实参:调用方法时传入的具体参数(多个实参使用逗号分隔)
  4. 实参与形参的个数必须一致,并且类型必须兼容
public static void main(String[] args){

    //调用方法,10和20为实参
    getMax(10,20);
}
//函数声明和函数体
//a 和 b 是形参
public static void getMax(int a,int b){
    int max = (a>b)?a:b;
    System.out.println("最大值为:" + max);
}

带返回值的方法

语法结构:

public static 返回值类型 方法名([参数列表]){
    ...代码块...
    return 具体数据;
}

注意:

  1. 方法声明时规定返回值类型
  2. 返回的具体数据必须和方法声明时返回值类型兼容
  3. 方法功能的单一性(不要让一个方法的功能太强大,代码会很复杂)
public static void main(String[] args){
		//调用方法
		int max = getMax(20,15);
		
		System.out.println("最大值为:" + max);
	}
	
	public static int getMax(int a,int b){
		int max = (a>b)?a:b;
        //1.将max返回给调用方 
        //2.结束该方法
		return max;
	}

方法的重载:

定义一个方法的步骤:
1.考虑方法名 – 见名知意
2.参数(参数数量、参数名称、参数类型)
3.返回值(返回值类型)

方法重载:

方法重载:方法与方法之间的关系(系统会根据具体实参类型自动匹配到对应的方法中)。

应用场景:一个类的多个方法的功能一致,细节实现不一样,就可以考虑使用

重载条件:(方法名一样,参数个数、参数类型不一样)

  1. 方法必须在同一个类中
  2. 方法名必须一致
  3. 参数列表的个数或者类型不一致
  4. 与返回值无关
public static int getMax(int a,int b){
		return (a>b)?a:b;
	}
	
	public static int getMax(int a,int b,int c){
		int max = getMax(a,b);
		max = getMax(max,c);
		return max;
	}
	
	public static double getMax(double a,double b){
		return (a>b)?a:b;
	}
	
	public static double getMax(double a,double b,double c){
		double max = getMax(a,b);
		max = getMax(max,c);
		return max;
	}

方法的递归:

方法递归:

方法递归:方法调用方法自身。

递归条件:

  1. 找出递归规律
  2. 找递归出口
//计算n的阶乘
public static int getFactorial(int n){
    //递归出口
    if(n == 1){
        return 1;
    }else{
        //递归规律
        return getFactorial(n-1)*n;
    }
}

递归死循环:

public static void main(String[] args){
   	 //递归死循环
		method();//报错,StackOverflowError - 栈内存溢出
	}
	
	public static void method(){
		method();
	}
}
/*
报错原因:
	系统调用方法就会在栈内存开辟空间,用于存放该方法的局部变量等等,死循环的调用方法,很快栈内存就被装满并溢出了,则系统报错
*/
递归之不死神兔
/*
不死神兔:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?
*/

/*
递归条件:
	1.递归规律:1、2、3、5、8、13、21、34...(当月兔子的对数等于上个月+上上个月)
	2.递归出口:第一个月和第二个月兔子都是一对
*/

public static void main(String[] args){	
    int num = getRabbit(8);
    System.out.println(num);
}

public static int getRabbit(int month){
    if(month == 1 || month ==2){
        return 1;
    }else{
        return getRabbit(month-1) + getRabbit(month-2);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值