JAVA基础后续

本文详细介绍了JAVA的基础知识,包括运算符、流程控制语句、Scanner、Math类、switch语句、转义字符、内存划分、类与对象、变量、异常处理、多态、接口与抽象类、自定义异常、泛型、String与StringBuilder的用法、基本数据类型与包装类的关系、集合框架中的List、Set和Map接口的应用、IO流、多线程概念和实现方式,以及线程安全性问题。内容覆盖广泛,适合初学者深入学习JAVA基础知识。
摘要由CSDN通过智能技术生成

第一天

package com.ishangu;

public class MainClass {
   
    public static void main(String[] args) {
   
	final int AGE;
	AGE=18;
 //	AGE=17;		因为常量的值是不能改变的,所以在二次赋值的时候会报错
	/*
	* Java中的运算符: 
	* 1: 算数运算符: +,-,*,/,%
	 */

常量:变量的重点在于一个字“变”,指的是变量的只在程序运行过程中可以不断的变化,而常量的值是不等变化的。

final:被fianl修饰的变量就叫做常量,常量只能被修饰一次,一般我们使用常量来储存一些不变的值。

		int i=100;
		System.out.println(i+50);
		System.out.println(i-50);
		System.out.println(i*50);
		System.out.println(i/50);
		System.out.println(i%50);
		System.out.println("*******************************************");

2:赋值运算符:=,+=,-=,*=,/=,%=,++,–

赋值运算符是指,在对变量进行运算之后重新复制给变量,也就是说使用赋值运算符会改变变量的值。i+=50:是指在i的基础上进行了+50的操作,然后重新赋值给i变量。

+=,-=,*=,/=,%=,++,–这些运算符会自动进行强制转换。

++: ++是指对变量进行自增1的操作,但是++如果写在变量的后面,会先使用变量本身的值,然后在进行自增,++如果写在前面,会先自增然后在使用。

	i+=50;  //相当于  i=i+50;的简写
	System.out.println(i);
	byte b=5;
	b=(byte) (b+5);  //b是byte类型,5是int类型,相加之后赋给byte会报错,需要强转。
	b+=5;		//有隐式强制转换,所以不报错
	i=100;
	System.out.println(i++);
	System.out.println(++i);
 3:字符串连接符: +
 字符串不能进行任何运算,只能使用+进行连接,并且任何数据碰到字符串后都会变成字符串。
 代码是从上往下,从左往右的顺序运行的。
 +号的左右如果是数字,就会进行加法运算,如果有一侧以上是字符串就会变成字符串连接符。

	System.out.println(5+5+"hello"+5+5); //10hello55
	//  优先运算符:()   可以改变同一行代码中的执行顺序。
	System.out.println(5+5+"hello"+(5+5)); //10hello10

比较运算符

 * 通过代码的执行,我们发现比较运算符执行完之后,得到的返回值都是布尔类型的值,所以我们也可以称所有的比较运算为: 布尔表达式 ,因为比较运算符的运算结果是
 * 布尔值,所有我们可以通过他来给布尔变量赋值。
 * 重点:字符串以及所有的引用数据类型不能使用==进行对比,因为引用数据类型使用==比较的是内存地址,所以可以使用对象名.equals()方法来进行比较,equals
 * 方法可以比较引用数据类型中具体的值是否一致。
	System.out.println(i==100); //因为i的值是102  所以结果是false
	System.out.println(i>100);  //因为i的值是102  所以结果是true
	boolean boo=i<100;			//使用布尔表达式,给布尔变量赋值
	System.out.println(boo);
	//String 类型比较特殊,在创建字符串变量的时候,可以使用类似基本数据类型的方式创建.
	String str="hello";
	//也可以使用String的构造方法来创建字符串变量。
	String str2=new String("hello");
	String str3="hello";
	String str4=new String("hello");
	System.out.println(str);
	System.out.println(str2);
	System.out.println(str==str2); //false str是常量池,str2是堆内存
	System.out.println(str==str3); //true  str和str3都是常量池
	System.out.println(str2==str4);//false str2和str4都是堆内存
	System.out.println("*******************引用数据类型的变量一般我们习惯叫对象**********************");
	System.out.println(str.equals(str2));
	System.out.println(str.equals(str3));
	System.out.println(str2.equals(str4));
	System.out.println("*******************************************************************");

逻辑运算符: &&,&,||,|,!

 *  &&,&: 主要用来拼接多个比较运算符的,只有当被其拼接的多个条件全部返回true的时候,结果才为true,只要有任何一条返回false结果就是false。
 *  &&  短路与:当左侧条件结果为false的时候,会进行短路直接返回false,不在执行右侧条件。
 *  &	位与    :必须执行完所有条件后,才会返回结果,位与可以进行位运算。
 *  !	取反   : 会对判断结果进行取反操作,让true变成false,让false变成true。
 *  板栗  奶茶  烤红薯  糖葫芦
	i=101;
	System.out.println(!(i==100 && (i+=200)>100 && i<5));
	System.out.println(i);
	System.out.println(i==100 &  (i+=200)>100 &  i<5);
	System.out.println(i);
 * ||,|: 主要用来拼接多个比较运算符的,被拼接的多个条件之中,只要有任意一个返回true,结果就是true。
 * ||	短路或: 当左侧条件为true,会立即返回true不在执行右侧条件。
 * |	位    或:必须执行完所有条件后才会返回结果,并且位或可以进行二进制位运算。
	System.out.println("*************************************************************");
	i=101;
	System.out.println(i>100 || (i+=100)>50 );
	System.out.println(i);
	System.out.println(i>100 |  (i+=100)>50 );
	System.out.println(i);

三目运算符:

布尔表达式 ? “当表达式为true的值” : “当表达式为flase的值”

三目运算符可以在不同的情况下来给变量赋不同的值,true的时候是一种值,false的时候是另外一种值。如果i大于100让number等于i 否则让number等于100

	i=59;
	int number = i>100 ? i : 100;
	System.out.println(number);
	/*
	 * i>100? 5>3 ? "5大于3" : 5==5 ? "5等于5" :"5不等于5":88>i? 99>88? i<100? "1":"2":"99不大于88" :"4"
	 * i>100 得到false 所有结果为true的代码拆除掉 5>3 ? "5大于3" : 5==5 ? "5等于5" :"5不等于5"
	 * 88>i? 99>88? i<100? "1":"2":"99不大于88" :"4"
	 * 最后结果是1
	 */
	System.out.println(i>100? 5>3 ? "5大于3" : 5==5 ? "5等于5" :"5不等于5":88>i? 99>88? i<100? "1":"2":"99不大于88" :"4");

第二天

流程控制语句之if

if:是JAVA中的选择流程控制语句,可以让我们在不同的情况下值行不同的代码。

if的语句如下:if(布尔表达式){

​ 当表达式为true的时候执行的代码,如果表达式为false就不执行的代码。

}

java
	double sale = 100;
	double pay = 0;
	if(age<18){
		System.out.println("未成年八折");
		pay = sale * 0.8;
		System.out.println(pay);
	}
	else if(age>60 && age<80){
		System.out.println("60以上岁老人票价五折");
		pay = sale * 0.5;
		System.out.println(pay);
	}
	else if(age>80){
		System.out.println("80岁以上老人免费");
		pay = 0;
		System.out.println(pay);
	}
	else if(age>18 && age<60){
		System.out.println(sale);
	}

else的用法

1.当我们使用多个if判断的时候,如果单纯使用多个if进行判断,那么所有的if没有任何关系,
所以有可能回同时执行多个if中的语句,为了解决这个问题,我们与要讲所有的if连接起来形成一个有机整体,这样的话就会只执行第一个符合要求的if。使用else关键字,连接所有的if条件,让其变成一个整体。

else的用法二:else除了用来接if之外,也可以单独配合if使用,如果else单独配合if使用的时候,当if中表达式为false就会执行else的代码。 else单独使用的时候代表是除了if的表达式是True意外的所有情况都执行的代码。

	if(age<18){
   
		System.out.println("未成年");
	}else{
   
		System.out.println("成年");
	}
		//if else 是支持嵌套的。
	System.out.println("请输入账号:");
	String username = sc.next();
	if(username.equals("admin")){
   
		System.out.println("请输入密码:");
		String passward = sc.next();
		if(passward.equals("123456")){
   
			System.out.println("登录成功");
		}else {
   
			System.out.println("密码错误");
		}
	}else{
   
		System.out.println("账号不存在");
	}

Scanner扫描流

 * Scanner扫描流:这个类可以扫描控制台,实现了控制台想代码中反向输出内容。
 * Scanner泪中的所有方法对是属于对象的,所以我们要先获对象才能使用里面的方法。
 * Scanner sc = new Scanner(System.in);
 * 由于这个类不在自己的包下,所以获取对象的时候需要导包才能使用,倒包是为了让JVM知道

    使用java.lang包下的类,以及自己包下的类不需要进行导包。
 * 使用Scanner的时候一定要注意,控制台一直在等着我们输入内容,否则无法往下执行,所以建议在使用Scanner的时候在每次从控制台输入值的时候,加上一句提醒。

Math数学操作方法

 * Math:是JAVA提供给我们的数学操作的方法,这里我们主要用来生成随机数。
 * Math中很多方法是属于类的,这些方法可以使用类名,方法名直接调用
 * Math.random()会随机生成一个0-1之间的随机小数,最小无限接近零,最大无限接近1
 * Math.random()*10:随机的范围会变成9.9999999~0.00000000010
 * (int)(Math.random()*10),会变成0~9的随机数
 * (int)(Math.random()*10+1),会变成1~10的随机数
	System.out.println(Math.random()*10);
	System.out.println((int)(Math.random()*10));
	System.out.println((int)(Math.random()*10)+1);

第三天

流程控制语句之switch

switch: Java流程控制语句之一,但是与if不同的是,if中我们可以使用范围判断而switch不支持范围判断,只支持具体值的判断所以在可用性上比if差了很多,一般只有当选择可能性 较少的时候我们才会使用switch。

switch的语法: switch (key) {

​ case value:

​ break;

​ default: break; }

其中key需要放变量或具体的值,case后面的value也不支持布尔表达式只能放具体的值,如果case后面的值与key相同,则会执行case中的代码,而所有case后面的value不能重复。如果所有的case都没有匹配成功,则会执行default的代码。 break: Java关键字之一,作用为终止当前作用域的代码。 总结:

  • 1:switch支持byte,short,int,char,String,枚举不支持long,float,double,boolean

  • 2:switch括号中可以放变量以及符合要求的值,case后面只能放值。

  • 3:switch在case对比成功之后,就会执行后面的所有代码,不会再次进行比较,哪怕之后case

    不符合要求,里面的代码也会执行,这种特性叫switch的穿透性,所以我们需要在每个case代码

    的最后使用break关键字避免执行其他case。

  • 4:当所有的case都对比失败,会进入到default代码中,而default是可选的(可以不写)。

	Scanner sc = new Scanner(System.in);
	
	  int i = sc.nextInt(); 
	  switch(i){
    
          case 1: 
              System.out.println("1");
	  		 break;
          case 2: 
              System.out.println("2"); 
              break; 
          default:
	  		 System.out.println("其他");

题目:单纯使用switch 判断年龄20以下算少年,年龄40以下算青年,年龄60以下算中年,其余老年。

	 int age = sc.nextInt(); 
	 switch (age/20) {
    
     	case 0:
	 		System.out.println("少年"); 
             break; 
         case 1: 
             System.out.println("青年");
	 		break; 
         case 2: 
             System.out.println("中年"); 
             break; 
         default:
	 		System.out.println("老年"); 
             break; 
     }

题目:使用switch+我们之前学过的三目运算符实现闰年以及平年,不能使用if

int year=sc.nextInt(); //年份

year=(year%400==0 || (year%4==0&&year%100!=0))? 1:0; 
switch (year) {
   
	  case 1: 
        System.out.println("闰年"); 
        break; 
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值