day2- Java基础语法
数据类型(续)
引用类型
Java中的数据类型除了8个基本类型数据外,其余的数据类型都是引用类型,引用类型类似C/C++中的指针,在java中引用类型通常表示为一个对象的引用,通过该引用可以获取到对象的相关信息,以及调用相关方法。声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象
Java中引用类分为以下几类:
-
类的引用(Class)
-
数组的引用(Array)
-
接口的引用(Interface)
例如
public class Student{
String name;
String sex;
int grade;
int age;
Student(String _name, String _sex,
int _grade, int _age){
name = _name;
sex = _sex;
grade = _grade;
age = _age;
}
}
测试
Student s = null;
String name = s.getName();//报错,空指针异常
s = new Student ("Lisa","Male",1,18);
String name1 = s.getName();//返回”Lisa”
Student s1 = s;
以下程序内存分配图:
一句话总结基本类数据和引用类型数据:
基本类型数据通常表示为一个值(数值,字符,布尔值);引用类型数据通常表示为一系列数据的集合(对象)
基本数据类型转换
在实际开发中会因为需求问题,将一些基本数据类型之间相互转换,比如将int转换为long,将char转换为int等,因此java中提供了数据类型转换机制:
-
小转大,直接转
-
大转小,需强转
char c1 = 'A';
char c2 = 'B';
//隐式转换
int i = c1;
System.out.println(i);
System.out.println(c1 + c2);
//强制转换
byte b = (byte)i;
//short s = (short)i;
long len = i;
System.out.println(b);
//算术运算时,系统会自动将小类型转换为大类型计算
short s = 10;
s = (short)(s + 10);
boolean类型不能够跟其他基本数据类型相互转换
方法(Method)
方法(c/c++的函数),java中通常将某些用于实现特定功能的代码片段包含成为一个整体,这个整体就称之为方法,通过方法的调用可以减少重复代码的编写(提高代码的可复用性);java中的方法属于类,语法结构如下:
【修饰符】<返回值类型> 方法名(【参数列表】){
//执行体
}
Java中的方法分类:
-
有参数有返回值
-
有参数无返回值
-
无参数有返回值
-
无参数无返回值
例如
//有参数有返回值方法(计算两个参数之和并返回)
public int add(int a,int b){
return a + b;
}
//有参数无返回值方法
public void msg(String s){
System.out.println(s);
}
//无参数有返回值方法
public String getName(){
return "翠花";
}
方法调用
java中的方法调用通常需要使用实例对象调用,如下:
引用变量.方法()
//创建对象
Demo d = new Demo();
//方法调用
int v = d.max(10, 20);
d.msg(v);
变量传值问题
Java中只存在值传递,不存在引用传递的概念
public class Test {
public void m(int i){
i = 20;
}
public static void main(String[] args) {
int i = 10;
Test t = new Test();
System.out.println("before:"+i);//i=10
t.m(i);
System.out.println("after:"+i);//i=10
}
}
例子2
public class Student {
String name;
public void setName(String name1){
name = name1;
}
public String getName(){
return name;
}
}
//测试类
public class Test2 {
public void m(Student s){
s.setName("狗蛋");
}
public static void main(String[] args) {
Student s = new Student();
s.setName("翠花");
Test2 t2 = new Test2();
System.out.println(s.getName()); // name=翠花
t2.m(s);
System.out.println(s.getName()); // name=狗蛋
}
}
运算符
java中的运算符,分为以下常用几类:
-
算术运算(+ - * / % ++ --)
-
关系运算(> < == >= <= !=)
-
逻辑运算(& | ! && || ^)
&和&&区别?
&:逻辑与,在进行运算时无论运算符左边的表达式结果是否为true,右侧的表达式依然会执行
&&:短路与,在进行运算时只要运算符左边的表达式结果为false,则右侧的表达式不再执行
任何类型的数据跟字符相加都会转换为字符串
表达式&语句块
表达式
表达式通常表示为运算符和运算数的结合,比如一个基本算数运算,一个赋值运算,对象调用方法,变量的声明都称之为表达式:
-
int i = 10;
-
a + b;
-
stu.getName();
表达式一般表示为一行语句
语句块
语句块一般表示为一系列表达式的集合,通常包裹在一对{}之间;一个类结构中的所有内容属于语句块,一个方法内部的内容也是属于语句块,条件分支,循环语句等都称之为语句块。
流程控制语句
java中程序的执行一般从主方法开始从上往下依次执行,是一种顺序结构;在实际情况中除了顺序执行外,还有一些其他执行方式,比如:
-
条件分支语句
-
循环语句
条件分支语句
java中的条件分支分为两种类型:
-
if...else..
-
switch
if...else...
语法结构:
结构一:
if(条件表达式){
}
结构二:
if(条件表达式){
}else{
}
结构三:
if(条件表达式){
}else if(条件表达式){
}else{
}
if...else...实例
* 提供一个分数,根据分数的所在范围,显示成绩等级
* >=90:A+
* >=80:A
* >=70:B
* >=60:C
* <60:学渣
扩展:如果分数大于100或者分数小于0则输出 无效的分数
public class Demo1 {
public String getLevel(int score){
String level = "";
//容错处理
if(score > 100 || score < 0){
level = "无效的分数";
}else if(score >= 90){
level = "A+";
}else if(score >= 80){
level = "A";
}else if(score >= 70){
level = "B";
}else if(score >= 60){
level = "C";
}else{
level = "学渣";
}
return level;
}
public static void main(String[] args) {
Demo1 d = new Demo1();
System.out.println(d.getLevel(65));
}
}
switch语句
switch语句是另一种分支语句,一般用于对某些枚举值(确定的,少量的值)进行分支判断,语法
switch(值){
case 值1:
break;
case 值2:
break;
....
}
实例
在平年的情况下,根据提供的月份返回该月份的总天数:
public class Demo2 {
public int getDayOfMonth(int m){
int day = 0;
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
day = 28;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
}
return day;
}
public static void main(String[] args) {
Demo2 d = new Demo2();
int day = d.getDayOfMonth(100);
System.out.println(day);
}
}
switch支持的数据类型包含以下:
整型:byte short int
字符型:char
字符串:String
枚举类型:enum
switch语句枚举类型的使用:
定义枚举类:
public enum Status { NONPAY, PAYED, SENDED, COMLETED }
使用枚举:
public class Demo3 { /** * 订单状态 * @param args */ public static void main(String[] args) { Status s = Status.COMLETED; switch(s){ case NONPAY: System.out.println("未支付"); break; case PAYED: System.out.println("已支付"); break; case SENDED: System.out.println("已发货"); break; case COMLETED: System.out.println("已完成"); break; } } }