Java基础语法(2)数据类型、方法调用以及流程控制语句等

day2- Java基础语法

数据类型(续)

引用类型

​ Java中的数据类型除了8个基本类型数据外,其余的数据类型都是引用类型,引用类型类似C/C++中的指针,在java中引用类型通常表示为一个对象的引用,通过该引用可以获取到对象的相关信息,以及调用相关方法。声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象

Java中引用类分为以下几类:

  1. 类的引用(Class)

  2. 数组的引用(Array)

  3. 接口的引用(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中程序的执行一般从主方法开始从上往下依次执行,是一种顺序结构;在实际情况中除了顺序执行外,还有一些其他执行方式,比如:

  1. 条件分支语句

  2. 循环语句

条件分支语句

java中的条件分支分为两种类型:

  1. if...else..

  2. 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支持的数据类型包含以下:

  1. 整型:byte short int

  2. 字符型:char

  3. 字符串:String

  4. 枚举类型: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;
            }
            
        }
    ​
    }
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值