Java 基础语法
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
- 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
基本语法
编写 Java 程序时,应注意以下几点:
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java 常量
常量在程序运行时是不能被修改的。
在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
final double PI = 3.1415927;
变量
数据可以在同一类型范围内变化,Java中每个变量必须先声明,后使用。
- 作用域: 一对{}之间有效。
- 格式: 数据类型 变量名 = 初始化值 ;
- 类型: 成员变量和局部变量
- 在方法体外,类体中声明为成员变量。
- 在方法体内部声明的变量为局部变量。 - 变量的作用域和生存期
变量的作用域:
作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:
变量从定义的位置开始就在内存中活了;
变量到达它所在的作用域的时候就在内存中消失了;
命名规范
- 类名、接口名: 所有单词首字母大写。
- 包名: 所有字母都小写。(. 表示下一层)
- 变量、方法名: helloWorld (首小其大)
- 常量名: 所有字母大写,多单词用"_"连接.
标识符与关键字
1、用来标识类名、变量名、方法名、类型名、数组名及文件名的有效字符序列称为标识符。
- ①标识符由字母、下划线、美元符号$和数字组成,长度不受限制。
- ②标识符的第一个字符不能是数字字符。
- ③标识符不能是关键字 。
- ④标识符不能是true、false和null(尽管它们不是Java关键字)。
- 列如: hello、TigerYear_2010、$98apple.
2、关键字:具有特定用途或被赋予特定意义的一些单词,关键字中所有字母都为小写。
各种数制系统之间的转换。
- ①二,八,十六进制转换成十进制 (按权相加)
(1101)'2- - - 1×2³+1×2²+0×2¹+1×2º= (11)'10 - ②十进制转换成二、八、十六进制
方法:连续除以进制数,从低到高记录余数. - ③二进制与八进制之间的转换
二进制转八进制: 从右向左,每3位一组(不足左补0)
八进制转二进制:用3位二进制数代替每一位八进制数。
数据类型
Java中八大基本数据类型
1.逻辑类型
常量:true、false。
变量:使用关键字boolean来声明逻辑变量,声明时也可以赋给初值。
boolean male=true,off=false,isTriangle;
2.整数类型
byte型: 1个字节内存占8位,范围:-128~127.
short型: 2个字节内存,范围:-2^15 ~ 2^15 -1.
int型: 4个字节内存, 范围:-2^31 ~ 2^31 -1.
long型: 8个字节占64位,范围:-2^63 ~ 2^63 -1.
3.字符类型
char型:2个字节内存占16位,范围:0~65535.
转义字符常量:\n(换行),\b(退格),\t(水平制表), '(单引号),"(双引号),\(反斜线)等。
4.浮点类型
float型:特别注意的是常量后面必须要有后缀f或F。保留8位有效数字,分配4个字节内存,占32位,取值范围:-2³¹ ~2³¹-1。
double型:分配8个字节内存,占64位。
5.按精度从低到高排列: (类型转换运算)
byte short char int long float double.
1)当低级变量值赋给高级变量时,系统自动完成数据类型的转换。 如:float x=100;
2)当高>低时,必须使用类型转换运算,格式为(类型名)要转换的值。如int x=(int)34.89.
6.int类转换成String类型:
①String.valueOf(i);
②String s=Integer.toString(i);
③ i+"":一个int型的常量+上个空的字符串int+string型就是先把i转换为string,然后跟上后面的string。
7. String类型转int类型
int i = integer.parseInt(s);
引用类型
- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
- 例子:Site site = new Site(“Runoob”)。
类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度,例如:
int i =128; byte b = (byte)i; //因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int)-45.89f == -45
自动类型转换
必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
public class ZiDongLeiZhuan{
public static void main(String[] args){
char c1='a'; //定义一个char类型
int i1 = c1; //char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于"+i1);
char c2 = 'A'; //定义一个char类型
int i2 = c2+1; //char 类型和 int 类型计算
System.out.println("char类型和int计算后的值等于"+i2);
}
}
强制类型转换
- 条件是转换的数据类型必须是兼容的。
- 格式:(type)value type是要强制类型转换后的数据类型 实例:
public class QiangZhiZhuanHuan{
public static void main(String[] args){
int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte
System.out.println("int强制类型转换为byte后的值等于"+b);
}
}
隐含强制类型转换
- 整数的默认类型是 int。
- 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
输入、输出数据
1.输出基本型数据
System.out.print()用于直接输出,System.out.println()也是直接输出,但在结束的地方会加一个换行
需要特别注意的是,在使用System.out. println() 或System.out.print()输出字符串常量时,不可以出现“回车”。输出字符串较长,可以分解成几部分,然后使用并置符号+将它们首尾相接。
public class Main{
public static void main(String[] args){
System.out.println("hello_1!");
System.out.print("hello_2!");
System.out.print("hello!_3");
}
}
2.输入基本型数据(Scanner)
如果你要进行输入,请一定加上两个包
import java.util.*;
import java.io.*;
请看下面例子用于输入单个字符
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws IOException{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt(); //输入一个整数
System.out.println(a);
double b=sc.nextDouble(); //输入一个双精度的浮点数
System.out.println(b);
String str=sc.next(); //输入一个单词,遇到分号则输入终止
System.out.println(str);
String str2=sc.nextLine(); //输入一行,中间可有多个空格
System.out.println(str2);
String str3=sc.readLine();
int a=Integer.parseInt(str2); //将str2转换为int,并复制给a
System.out.println(a);
String str4=sc.readLine();
double b=Double.parseDouble(str3); //将str3转换为double,并复制给b
System.out.println(b);
}
}
3.格式控制
- 由格式控制符号%d、%c、%f、%s和普通的字符组成,普通的字符原样输出,格式符号用来输出表达式的值。
%d:输出int类型数据。
%c:输出char型数据。
%f:输出浮点型数据,小数部分最多保留6位。
%s:输出字符串数据。 - 输出数据时也可以控制数据在命令行的位置
%md:输出的int型数据占m列。
%0md:输出的int型数据占m列,不足在前补0.
%m.nf:输出浮点型总占m列,小数点保留n位。
如: System.out.printf("%d, %f",12,23.78) ;
4.随机数输出
Random ran=new Random();
ran.nextInt(n)-1; (n):随机输出(0~n);
数组
1. 声明数组包括数组变量的名字(简称数组名)、数组的类型。
声明数组有下列两种格式:
数组的元素类型 数组名[];
数组的元素类型 [] 数组名; (常用)
Java不允许在声明数组中的方括号内指定数组元素的个数。否则将导致语法错误。
如: int a[12]; 或 int [12] a; (错)
2)为数组分配元素
声明数组仅仅是给出了数组变量的名字和元素的数据类型,还需为数组分配元素,
格式:数组名 = new 数组类型 [数组个数];
例如: boy = new float[4] ;
声明数组和创建数组可以一起完成。
float boy[] = new float[4];
在声明后必须用new运算符为数组分配元素.
3)length的使用
数组的元素的个数称作数组的长度。对于一维数组,“数组名.length"的值就是数组中元素的个数;对于二维数组,“数组名.length"的值是它含有的一维数组的个数。 例如,对于
float a[] = new float[12];
int b[] []= new int[3] [6];
a.length的值12。而b.length的值是3。
数组的四个基本特点
- 其长度是确定的。数组一旦被创建,它的大小就是不能改变的。
- 其中的元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身即是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组的创建实例
package com.kikikikikiku.array;
public class ArrayDemo01 {
public static void main(String[] args) {
int sum=0;
//1.声明一个数组
int[] nums;
//2.创建一个数组
nums = new int[10]; //这里面可以放10个int类型的数字
System.out.println("数组为:");
//3.给数组元素赋值
for (int i = 0; i <nums.length; i++) {
nums[i]=i+1;
sum += nums[i];
System.out.print(nums[i]+" ");
if (i==nums.length-1){
System.out.println();
}
}
//计算所有元素的和
System.out.println("所有元素的和为:"+sum);
}
}
内存分析