Java培训笔记 1-环境介绍与基本语法

Java基本数据类型

  • 字符类型char(用单引号赋值)
  • 布尔类型boolean(只有true和false两个取值,java中不可以用0/1表示真假。)
  • 数值类型byte(8位,最大存储数据量是255,存放的数据范围是-128~127之间。)、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。

JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。8 中类型表示范围如下:

String和StringBuffer/StringBuilder的区别

String和StringBuffer都是final类。

它们都可以储存和操作字符串,但String类提供不可改变的字符串,而StringBuffer类提供的字符串可以进行修改
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。StringBuffe只能通过构造函数来建立:StringBuffer ss = new StringBuffer(“Hello”);不能通过赋值符号对他进行赋值。
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null。向StringBuffer中赋值的时候可以通过它的append方法。ss.append("w!"); //地址不可更改,长度和内容可改。append()方法是追加,超过预留内存时,内存翻倍。

效率比较:StringBuffer比String高。因为StringBuffer有预留空间一直追加,只是对一个对象进行操作。而String是不能被修改的,只能重复的去创建对象来实现修改。——如果频繁的对字符串进行追加、替换、修改、插入、删除操作,最好使用StringBuffer。如果必须用String可以使用StringBuffer调用toString()来转换成String即可。

StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。我们通常使用StringBuilder类来代替String对象的“+”号拼接功能。
关于String不可变的解释

String形参和实参问题

看这里

常用的字符串函数

  • startsWith() 方法用于检测字符串是否以指定的前缀开始。
  • subString()方法用于返回字符串的子字符串,index从0开始。
  • replaceFirst() 方法使用给定的参数 replacement 替换字符串第一个匹配给定的正则表达式的子字符串。***注:***System.out.println(x.replaceFirst(“AE”,“AC”)); 输出替换。如果先替换在输出,仍然是原来的值,不改变原字符串。
    更多方法看这里

String两种赋值方式的内存分配

java运行时内存分五部分:

线程共享:堆内存、方法区(包括常量池)

线程私有:栈内存、本地方法栈、程序计数器

1、string直接赋值:

String s = “haha”; //也会分配内存,但存在一个常量区

s的引用存在栈内存中,引用指向的haha存在方法区的常量池中(先判断常量池中是否有一个haha,存在则直接指向)

2、string对象new创建

String s = new String(“haha”); //java对象,会分配内存

s的引用存在于栈内存中,引用指向的haha对象,存在堆内存中(每new一次,在堆中创建一个新的haha对象)

如果方式1先于方式2定义的话(字符串内容相同),new String会分配新的内存地址,但是会连接到常量区的String,资源一样。这样就不会多余分配内存。
总结:

  1. string类型的引用,都是存在栈内存中的;
  2. string引用指向,直接赋值存在栈内存,new出来的存在栈内存。

看这篇

equal与==的区别

这篇讲的很好
主要是==比较内存地址,euqal比较的是值。String str = new String(“xxx”); new出来的新对象放入堆中,而String s1="xxx"放在常量池中。(因为string重写了equals方法,ctrl+右键即可点进去看)
注:因为StringBuffer中没有对equals函数重写,里面相当于判断变量,即判断是否指向同一个地址,这个时候要比较值是否相等可以转换为String类型。

" "和null的区别

isEmpty()方法重写了,同时判断了null和" "的情况
程序看这里
String a = new String
String b = “”
String c =null
a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已)
b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串)
c是未分配内存空间,无值,是一种无值(值不存在)

Switch中没有break

如果case语句中没有break跳出循环的话后面的case将不做判断直接运行,而且default中的语句也会执行。

在这里插入图片描述
从JDK7开始,我们可以在switch条件表达式中使用字符串了。

这里有更多的情况

while循环

While:代码块一直循环执行,直到循环条件不再为真。

int number = 1234;
int sum =0;
while(number>0){
	sum +=number%10;
	number = number/10;
}

Break只能跳出一层循环

这里有for+while的情况

package test4;
/*
 * 蜗牛白天往上爬5米,晚上掉3.5米,井深56.7
 */

public class SnailsDays {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double WellDeep=56.7;
		double today = 0;
		for(int d =1;;d++) {
			today = today+5;
			if(today>WellDeep) {
				System.out.println("第"+d+"天,蜗牛爬上来了");//if不计算在内,跳出for循环
				break;
			}
			today = today-3.5;
		}
	}
}

使用split()分割字符串对象

分割符是 . 或者是 | 时,必须使用 \ 进行转义。

异常分类

异常分两种:

1.编译时被检查的异常,只要是 Exception 及其子类都是编译时被检测的异常。

2.运行时异常, 其中 Exception 有一个特殊的子类 RuntimeException ,以及 RuntimeException 的子类是运行异常,也就说这个异常是编译时不被检查的异常。

float f = 36.25; 编译出错

Java中出现一个小数时,如果没有明确指出类型,那么默认是double类型的,所以在编译时,3.4为double类型的赋给float类型的f变量,为向下转型,会丢失精度所以报错。

怎么解决
1.强制类型转化 float f = (float)3.4
2.明确类型:float f = 3.4f
参考

*型树的实现方法

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("输入树的层数:");
		int x = new Scanner(System.in).nextInt();
		for(int i = 1;i<=x;i++) {
			int space = (x*2)/2-i;
			int tree = i*2-1;
			//输出空格
			for(int j = 1;j<=space;j++) {
				System.out.print(" ");
			}
			//输出*号
			for(int k=1;k<=tree;k++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

运行结果:

在这里插入图片描述

byte 与 int 转换越界,出现负数

int i=150;
byte b = (byte)i;

八位一个字节,150转化为二进制(除2取余,由下到上写)是1001 0110,是负数。二进制负数转化为十进制:①按位取反再加1,结果是:01101010 ②加上负号,转为十进制,结果为:-(2+8+32+64)=106

Java所定义的版本有哪些

  • Java EE(Java Platform,Enterprise Edition)是sun公司推出的企业级应用程序版本,以前称为 J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端 Java应用程序。Java EE 是在 Java SE 的基础上构建的。
  • Java SE(Java Standard Edition,Java 标准版)是Java技术的核心和基础,是Java ME和Java EE编程的基础 。Java SE是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
  • Java ME 又称为J2ME(Java Platform,Micro Edition),是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API,适用于小型设备和智能卡。
    Java ME与Java SE、Java EE一起构成Java技术的三大版本,通过JCP(Java Community Process)制订。

运算符优先级

在这里插入图片描述
() > 自增/自减/取反 > 算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符

不同修饰符混用

权限修饰符一般放于所有修饰符之前,不同的权限修饰符不能同时使用;

  • abstract与private不能同时使用;abstract类中可以有private的成员。【abstract需要子类继承实现,可private不能被子类继承】
  • abstract与static不能同时使用; 【abstract修饰的本类还未实现都不允许 new ,可static却直接可以通过类调用】
  • abstract与final不能同时使用。【abstract需要子类继承实现,可final不能被修改】
  • abstract方法必须在abstract类中。抽象类不一定含有抽象方法,只要保证抽象方法所在的类是抽象类即可。
  • static方法中不能处理非static的属性
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值