初学Java---如何使用数据类型与变量


第三单元 如何使用数据类型与变量*


第一部分 基本类型


一、如果在Eclipse中出现某个工程上有粗的感叹号如何解决?

  • 右键点击该工程–Build Path–Configure Build Path —然后按下图提示即可解决。

在这里插入图片描述
在这里插入图片描述

二、准确口述(面试点)

(一)变量-标识符-关键字
  • 1.什么是变量?成员变量与局部变量有什么区别?

    • 定义:变量是指没有固定的值,可以改变的数;变量以非数字的符号来表达。变量包括成员变量和局部变量。
    • 区别:成员变量(属性);局部变量(local variable-方法内部定义):在使用前必须赋值,它没有默认值。
  • 2.什么是标识符?标识符的命名规则是?

    • 定义:标识符就是名字,包括属性名、变量名、方法名。
    • 命名规则:以_、 、 字 母 开 头 , 后 面 可 以 是 数 字 、 、 、字母开头,后面可以是数字、_ 、 、字母,不能是关键字。
    • 以下合法的标识符的是?
    • A. _ 是 (下划线)
    • B. TURE 是
    • C. String 是
    • D. 23name 不是 (数字开头)
    • E. *p 不是 (*开头)
    • F. for 不是 (关键字)
    • G. Hello World 不是(不能有空格)
    • J. 学生 是合法
  • 3.什么是关键字?它有什么特点?共有多少个?

    • 定义:关键字(keyword)要全小写,一共53个关键字

      在这里插入图片描述

    • 以下哪些是关键字?true、false、null、goto、const

      • 答:纸上作答时:true、false、null也要选,它们可能看起来像关键字,但它们实际上是自变量;goto 和const是关键字,但不能使用。
(二)基本类型
  • 1.Java中的数据类型分类?分别是什么?

    • 分类:8种基本类型,3种引用类型,共11种
    • (1).布尔类型(boolean):取值:true或false-长度不明确
    • (2).字节型(byte):一个字节8位;范围:-128~+127;
      • byte age = 130是不正确的,超出范围。
    • (3).字符型(char):2个字节16位;范围:0-65535;字符编码:Unicode编码;
      • 一个汉字几个字符?Java中一个汉字一个字符,在C/C++中不成立。
    • (4).短整型(short):2个字节:16位;范围:-32768~+32767
    • (5).整型(int):4个字节:32位;范围:-2^(n-1) ~2^(n-1)-1;
    • (6).长整型(long):8个字节:64位;
      • long类型什么情况下必须加L或l?
        • 答:如果值超过了int的最大值了,L是必须加的;大小写都可以,推荐大写容易区分。
    • (7).浮点型(float):4个字节:32位;
      • .314f代表0.314,314.f代表314.0。
      • float数据F或f能省略吗?
        • 答:不能,必须加。
    • (8).double:8个字节:64位;D可加可不加,默认值就是double类型,加上是为了区分数据类型。
  • 2.搜字符编码,UNICODE、UTF-8、ISO-8859、GB2312、GBK

    https://baike.baidu.com/item/字符编码/8446880?fr=aladdin

  • 3.Java中转义字符:https://www.cnblogs.com/qinning/p/11006380.html

  • 4.String是不是内置数据类型?

    • 答:不是关键字也不是内置数据类型,它可以当变量名使用。
  • 5、20和9.8的默认数据类型是什么?

    • 答:20的默认为int类型,9.8的默认为double类型;小数默认为double类型,整数默认为int类型。
  • 6.boolean类型数据的长度是多少?

  • 7.基本的数据类型转换规则?

    • 答:有一种类型不能转换–boolean类型,其他的都可以

    • 转换规则 :低级类型转高级类型-自动,高级类型转低级类型-必须强制;但是byte short char 不需要加相应的强制转换,因为这些计算是要先转到int 。

  • 面试题:Java语言各种数据类型长度会不会随平台变化?

    • 答:不会,否则Java就无法平台无关了。

    • 从左往右由低级到高级:byte char short在运算时都会转成int型

      • char int long float double
      • byte short int long float double
    • 格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本放大的数据

    • 面试题

      int y = 'A' + 2;
      
      //67
      System.out.println(y);
      
      char z = 'A' + 2;
      
      //C
      System.out.println(z);
      
      short x5 = 90;
      
      //x5=x5+1
      x5 += 1;
      
      short y4 = 100;
      y4 = y4 + 1;//不正确

三、动手任务

编写Teacher类,提供8个属性,使用8种数据类型
  • Teacher类属性:教师年龄(byte)、教师月薪(short)、教师年薪(int)、 教师工号(long)、教师体重(float)、教师身高(double)、教师性别(char)、是否是教授(boolean)
  • 覆盖知识点:标识符、关键字和基本类型;标识符命名规则(面试题)、给每个属性提供setter/getter方法

第二部分 引用类型


一、准确口述

  • 1.如何理解引用(复合)类型?共3种,包括类、数组和接口
注:类(类型):类名的首字母大写;变量名的首字母小写;如果多个单词构成,中间单词首字母大写。首字母大写有两种情况:类或接口。
  • 2.内存(放数据)的逻辑划分是什么?各自的作用是什么?
    • (1).栈:放的是局部变量(用完之后就消失),所有的局部变量都会入栈。
      • 作用:用于频繁的数据交换
      • 特点:先进后出
      • 栈区的管理者:由操作系统(OS)管理
    • (2).堆:放的是对象 new出来的东西放堆区
      • 堆区比栈区大
    • (3).全局数据区:全局变量,static变量
    • (4).代码段:放代码

示例1:

public class Worker {
	int grade = 4;
	String name = "zhangsan";
	
	public static void main(String[] args) {
		Worker w1 = new Worker();
		int age = 21;
		Worker w2;
	}
}

上边代码对应的内存里程序的变化图示:内存单元都有唯一的编号

在这里插入图片描述

示例2:

public class Worker {
	int grade = 4;
	String name = "zhangsan";
	public static void main(String[] args) {
		new Worker();	 
	}
}

上边代码对应的内存里程序的变化图示如下:

在这里插入图片描述

  • 3.基本类型值传递和引用类型值传递的区别?
    • 值传递就是值的复制过程
    • 两种类型的值传递示例:
  public class ValueTrasfer {
 	/**
	基本类型值传递:
	@param age 年龄
	@return 折半的值
  	*/
  	public int harf(int age) {
  	//20
  	System.out.println(age);
  	int result = age / 2;
  	age--;
  	//20
  	System.out.println(age);
  	//10
  	return result;
  	}

  	public void change(Worker wx) {
  		wx.grade = 100;
  		wx.name = "王宇";
  	}

  	public static void main(String[] args) {
  		ValueTrasfer valueTrasfer = new ValueTrasfer();
  		int x = 20;
  		int result = valueTrasfer.harf(x);
  		//20
  		System.out.println(x);
  		//10
  		System.out.println(result);
  	
  		Worker xa = new Worker();
  		valueTrasfer.change(xa);
  		System.out.println(xa.grade);
  		System.out.println(xa.name);
  	}
}

上边代码对应的内存里程序的变化图示如下:

在这里插入图片描述

  • 4.说明Java的垃圾回收机制(GC(Garbage Collector)机制)?
    • (1).垃圾就是无用对象,尽快离开堆区,不然浪费内存单元
    • (2).内存泄漏:无用的对象还在内存中存在
    • (3).Java中自动垃圾回收机制,C/C++需要程序员来完成垃圾回收
  • 面试题:
    • (1).Java语言有没有可能产生内存泄漏?答:有可能。
    • (2).Sysytem.gc()方法能否强迫JVM进行垃圾回收机制?
      • 答:不能,gc方法只是建议JVM进行垃圾回收。
    • (3).gc方法一使用,JVM就立刻工作回收垃圾?不一定。
    • (4).Object: finalize()在正式垃圾回收前它可被执行,做一些收尾工作。
    • (5).程序员能否深度干预垃圾回收?答:不能,只能建议。

二、动手做任务

编写Person类,提供Address属性和name、age属性
  • Address类属性(家庭地址、工作单位地址)
  • Person类属性:Address、name和age;方法有:设置地址、获得地址、设置姓名和获取姓名;

三、独立任务

实现两个整数的交换
  • 1.不用中间变量实现两个整数交换
  • 2.用中间变量实现两个整数交换
package com.ychs.corejava.unit3;

/**
 * 实现两个整数的交换
 * @author zhaobiao
 * @version 1.0
 */
public class Change {
	public static void main(String[] args) {
		//第一种方法,使用中间变量进行两个整数的交换
		int a = 10;
		int b = 20;
		int temp = 0;
		System.out.println("交换前:"); 
		System.out.println("a = " + a);
		System.out.println("b = " + b);
		
		//把a的值赋给temp
		temp = a;
		a = b;
		b = temp;
		System.out.println("交换后:");
		System.out.println("a = " + a);
		System.out.println("b = " + b);	
		System.out.println("------------");
		
		//第二种方法:不使用中间变量进行两个整数的交换
		int x = 5;
		int y = 2;
		System.out.println("交换前:"); 
		System.out.println("x = " + x);
		System.out.println("y = " + y);
		
		//x = 7, y = 5
		x = x + y;
		//x = 12, y = 7
		y = x - y;
		//x = 12, y = 7
		x = x - y;
		System.out.println("交换后:");
		System.out.println("x = " + x);
		System.out.println("y = " + y);
		System.out.println("------------");
		
		//第三种方法,不使用中间变量进行两个整数的交换(考虑异或运输符)
		int m = 8;
		int n = 3;
		System.out.println("交换前:"); 
		System.out.println("m = " + m);
		System.out.println("n = " + n);
		
		m = m^n;
        n = m^n;
        m = m^n;
        System.out.println("交换后:");
		System.out.println("m = " + m);
		System.out.println("n = " + n);
		
	}
}

四、补充内容:Java虚拟机(JVM)底层

1.Java虚拟机底层详解:https://blog.csdn.net/sany_123/article/details/61918123
2.深入了解JVM的底层原理:https://blog.csdn.net/ligh_sqh/article/details/79481040
3.JVM内存区域模型(体系结构图) 如下:

在这里插入图片描述


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕兮IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值