首页 > 编程语言 >java语言基础

java语言基础

时间:2022-10-12 22:44:56浏览次数:44  
标签:java 语言 int 基础 System println public out

初识计算机和java语言

1.计算机由硬件和软件组成

计算机中的主要硬件

  • cpu
    是计算机中最核心的部件,类似人的大脑
    一台计算机的运算核心和控制核心都由cpu完成
    其主要功能是解释计算机的指令以及处理计算机软件中的数据
    ps 端cpu主要是intel和amd在生产

移动端处理器 高通骁龙 华为麒麟 苹果 a系列

  • 内存
    内存也被称为内储存器

用于暂时储存cpu中的运算数据以及与硬等外部储存器交换数据
cpu可以直接访问内存 而且效率很高
容量小不能实现永久储存,一旦断电和造成数据丢失
时刻记得ctrl+s将数据放到硬盘中

  • 硬盘
    计算机中的储存设备
    主要用于永久储存数据 容量大 断电不会丢失

cpu不能直接访问硬盘中的数据 若要访问需要先加载到内存中

  • 输入输出设备
    其中键盘叫标准输入设备,显示器叫标准输出设备

常见的软件
分为系统软件和应用软件
主流操作系统:windows unix linux (移动端)ios android

计算机体系结构

为什么硬盘的内存在买回后回比标注的少
硬盘的生产厂家在生产硬盘的时候会以1000作为换算单位,及1000m为1g 最后在电脑上计算机以1024作为1g进行换算

java语言的主要版本

javaEE是建立在javaSE的基础上

相关概念

javac.exe--编译器 负责将高级语言java的源代码翻译成字节码
java.exe--解释器 用于启动jvm对字节码进行解释并执行

编写java程序的流程

  1. 新建文本文档,将文件的扩展名改为.java
  2. 使用记事本notepid++打开文件,编写java代码后进行保存
  3. 启动dos窗口,并切换的java文件所在的路径
  4. 使用javac xxx.java进行编译,生成xxx.java的字节码文件
    5.使用java xxx进行解释执行,打印最终的结果

编写java程序的流程

  • 编程习惯:1遇到做左括号的下一行代码,一般空一行再缩进
    2 右花括号始终和左化括号所在行的第一个单词对齐
    3.main方法为程序的入口

启动dos窗口并切换java文件所在的路径的方法

  1. 点击空白处 按住shif+鼠标右键 powershell窗口
    2.将文件所在目录改成cmd即可

dos命令:cls清理屏幕
java代码中常见的错误

通常出现多个错误,找第一个报错


该方法问题很大

常见的快捷键

java跨平台原理

java 字节码可以通过JVM翻译成具体平台能够执行的机器指令,sun公司定义了JVM的规范,而且不同的操作系统大多提供了JVM的实现,使得相同的字节码客园在不同的系统上运行

变量的概念

变量的数据类型决定了其所占的存储单元的大小
变量名

标识符的命名规范
在开发中一般以字母命名
常用的进制

二进制中最高位代表符号位,0表示非负数 1表示负数

十进制转换为二进制------拆分法

负的十进制转换为二进制*
1.先将十进制的绝对值转换为二进制
2.将此二进制取反 然后+1

负二进制转为十进制

和前面的过程相反

单个字节表示的范围为 -128---127

整数类型的概念

在开发中推荐用int类型

整型的应用

 /*
	编程实现整数类型的应用
*/

public class IntTest{
		
		public static void main(String[]args){
			
				1.byte a=25;//此处也存在int-->byte  但25在byte的数据范围内 编译器帮我们优化(仅为字面量的时候适用)
				//没有报错
				System.out.println(a);
				byte b=250; //不兼容的类型: 从int转换到byte可能会有损失
				//250这种直接写出来的整数数据叫直接量/常量/字面量 默认文Int类型
				//从int -->byte 转换会损失精度而报错
				System.out.println(a);


		}	
}
	
  int a =25;
byte i=a;//和1.处对比,虽然也是int-->byte但右值为变量,编译器不能帮我们优化
  

浮点数的概念

  • float 表示的有效数字位为7位
  • double 表示的有效数字位为15位

浮点型编程的使用

  
  public class DoubleTest{
	  
	  public static void main(String[]args){
		  
		  float a=3.1415926456;//1.对于直接写出来的浮点型数据默认位double,可以写后缀改变
		  //2.存在double-->float 造成数据损失
		  //3.float 类型只保证只保证7位有效数字的准确,后面不保证
		  System.out.println("a="+a);
		  
		  double b=3.1415926456;//这里就不会报错
		  
	  }
  }
  

笔试考点
1.浮点型数据不能实现精确运算,若需要精确运算(比如算金钱)可以用 java.math.BigDecimal

布尔类型的概念和运用


/*
boolean类型的应用
*/



  
public class BooleanTest{
	
	public static void main(String[]args){
		
		boolean a=false;
		boolean b=true;
		System.out.println("a="+a+"b="+b);
		boolean c=0;//将会报错 int不能转化为boolean
		
	}
}

字符类型的概念

  • char 中计算机内占2个字节 ,并且没有符号位
  • 所表示的范围是0-65535

字符的存储
在计算机中为了储存字符,可以给字符一个编号,然后将编号存储起来,这个编号叫ascii,实现间接存储
需要掌握的ASCII ‘0’---48 ‘a'---97 'A'---65 空格---32 换行符---10

char的应用(重要)
1.char 类型在计算机底层中实际上是储存其ASCII码,在最底层实际为ASCII码对应的二进制
对其的打印实际上取决于对其的解析方式
2.

/*
编程实现char类型的使用
*/

public class CharTest{
	
	public static void main(String[]args){
		
		char c='a';
		System.out.println(c);//该方式字符按字符解析 打印出字符
		System.out.println((int)c);//该方法字符按ASCII解析 打印出ASCII
		
		
		char a=98;//图案在底层就是整数编号,直接给整数编号没问题 该处和数据类型转换无关
		int b='a';//字符在底层就是整数类型,直接赋值给int 没有问题
		
		
		
	}
}

unicode字符集的概念和使用

  • java字符集采用unicode字符集编码,为世界定长字符集,所以字符占16位
  • unicode和ASCII是兼容的,可以将unicode想象成ASCII的扩展版
  • 可以看成unicode和ASCII一样
/*
编程实现char类型和unicode字符集的使用
*/

public class CharTest{
	
	public static void main(String[]args){
		
		char c='a';
		//System.out.println(c);//该方式字符按字符解析 打印出字符
		//System.out.println((int)c);//该方法字符按ASCII解析 打印出ASCII
		
		
		char a=98;//图案在底层就是整数编号,直接给整数编号没问题 该处和数据类型转换无关
		int b='a';//字符在底层就是整数类型,直接赋值给int 没有问题
		
		
		//unicode是ASCII的扩展版 兼容ASCII
		//虽然unicode看样子是字符集,但可以看成和ascii一样
		//\u77f3\u6587\u6d9b
		char s='\u77f3';
		char w='\u6587';
		char t='\u6d9b';
		int g='\u6d9b';
		//System.out.println("你的姓名是:"+s+w+t);
		//System.out.println(g);
		
		
	}
}

转义字符的概念和使用

//将原本的含义转换为该含义自身
 
 
 //对于java代码中一些特殊字符 含义表示(以"为例)
 //1.表示字符串的开头和结尾 2.表示 该”本身
 //系统和默认为第一种含义,如果要表示第二种含义则需要转义
 public class SpecialCharTest{
	 
	 public static void main(String[]args){
		 
		 System.out.println("我想过过\"过过的生活");//该“如果不转义 计算机识别不了
	 }
 }

自动类型转换和使用

(注意:从long--->float 的易错点 .主要和float和底层存储有关,及表示范围)

/*
 实现基本数据类型转换的应用
 */
 public class TypeChageTest{
	 
	 public static void main(String[]args){
		 
		 byte a=3;
		 short b=4;
		 b=a;//a由byte-->short 由小范围-->大范围 为自动转换 因为不会损失精度
		 System.out.println(b);
	 }
 }

强制类型的转换

  
 /*
 
 用于测试强制类型转换
 */
 
 public class Casting{
	 
	 public static void main(String[]args){
		 
		 //情况一
		 short a=45;
		 byte b=(byte)a;//此种情况,a的值在byte的范围中,不会出现数据损失
		 System.out.println(b);
		 //情况二
		 
		 short c=128;
		 byte d=(byte)c;
		  System.out.println(d);//short c 的128在byte中放不下,会造成数据损失	  		
		 //输出为-128
		 
	 }
 }

过程的证明:

算术运算符
基本一致 略

字符串连接符的概念和使用

 /*
 测试字符串连接符+的作用
 */
 //+既可以是加号运算符又可以是字符串连接符
 
 //判断方法:当+两边至少有一个是字符串类型则+为字符串连接符,否则为加号运算符
 public class StringLink{
	 
	 public static void main(String[]args){
		 
		 int a=3;
		 int b=5;
		 int c=6;
		 System.out.println(a+b+c);//14
		 System.out.println(a+b+c+"");//14
		 System.out.println(a+b+""+c);//86
		 System.out.println(a+""+b+c);//356
		 System.out.println(""+a+b+c);//356
		 System.out.println(""+(a+b+c));//14
	 }
 }

自增自减运算符

 /*
 自增自减运算符的运算顺序
 */
 public class SelfTest{
	 
	 public static void main(String[]args){
		 //规律总结:i++ 中i为操作数 ++为操作符 i++为表达式
		 //++i 表示先让变量+1 然后让变量的值作为表达式的结果
		 //i++ 表示先让变量的值作为表达式的结果,在让变量加1
		 int a=6;
		 System.out.println(a);//6
		 System.out.println(a++);//6//实际是要输出表达式的值
		 System.out.println(a);//7
		 System.out.println(++a);//8
	     System.out.println(a);//8
		 int b=6;
		 int c=8;
		 //实际为变量+1的数值是否作为表达式的值
		  System.out.println(a+b+c);//22
		 System.out.println(a+++b+c);//22
		  System.out.println(a+b+c);//23
		   System.out.println(++a+b+c);//24
	 }
 }
 

逻辑运算符
逻辑运算符要求两边的操作数或者两边的表达式都必须是boolean类型

逻辑运算符的短路特性

  • 对于逻辑与运算符 第一个表达式为则 整体为假,则会跳过第二个表达式的判断
  • 对于逻辑或运算符 第一个表达式为 则整体为真 则会跳过第二个表达式的判断
  /*
 验证逻辑运算符的短路特性
 */
 
 public class ShortCircuit{
	 
	 public static void main(String[]args){
		 
		 int a=3;
		 int b=5;
		 //逻辑与第一个表达式为假 则跳过第二个表达式不执行
		 boolean c=(++a==3)&&(++b==5);
		 System.out.println("c="+c);//false
		 System.out.println("a="+a);//4
		 System.out.println("b="+b);//5
		 //逻辑或第一个表达式为真 则跳过第二个表达式不执行
		// 举例略
		 
		 
	 }
 }

三目运算符
以实际执行表达式的值作为三目表达式整体的值

赋值运算符
赋值表达式本身也有值,其本身之值即为所之值的值

赋值表达式面试题----编译器优化类型转换

  /*
  阐述下面2个表达式的区别
   */


public class Main {

    public static void main(String[]args){


                byte b=5;
                //表达式1
                 //b= b+2;   //不兼容的类型: 从int转换到byte可能会有损失
                            //对错误的理解1:以为2为字面量 默认为Int 和b运算为int 向byte转换报错(理解有误)
               //表达式2      //正解:实际上这是编译器的一个优化,对于2个小类型的运算,编译器会将其结果转换为int
        //防止溢出 (byte short char之间都会这样)
                 b+=2;
                 //这2个表达式实际上不完全相等b+=2等价于b=(byte)b+2  已经提前转换














    }
}
//编程经验
a==2;
2==a;//推荐这一种写法
//用这种写法 少写一个=时 ,编译器会报错

移位运算符(了解)

应用:

/*
编程实现移位运算符的使用
*/
public class MoveBitTest{
	
	public static void main(String[]args){
		
		//左移为将整数二进制往左移动一位 右边补零
		byte a=13;
		//byte b=a<<1;数据不兼容 编译器将左移的答案优化为int
		byte b=(byte)(a<<1);
		System.out.println(b);
		//左移规律 左移一位相当于当前整数*2
		//左移2位相当于整数*4
		
		int d=20;
		//右移二进制往右移动一位左补符号位
		byte c=(byte)(d>>1);
		System.out.println(c);
		System.out.println(c>>1);
		//右移规律:右移一位相当于当前整数/2
		//右移2位相对于当前整数/4
		
		//逻辑右移对于非负数来说 和右移是一样的
		
	}
}

位运算符

对于& \ ~(取反)和逻辑运算符的相比较 只是按照 位进行
^相同为真不同为假

位运算符的使用

计算个人所得税

*个人应纳税所得额(本金-不用纳税部分) 对应税率-速算扣除数

 /*
 利用switch case模拟菜单系统
 */
 import java.util.Scanner;
 public class SwitchMenuTest{
	 
	 public static void main(String[]args){
		 
		 Scanner st=new Scanner (System.in);
		 System.out.println("        欢迎来到拉钩教育");
		 System.out.println("---------------------------------");
		 System.out.print("  [1]学员系统    [2]管理员系统\n");
		 System.out.println("  [0]退出系统");
		 System.out.println("---------------------------------");
		 System.out.println("请选择要进入的系统:");
		 int choose=st.nextInt();
		 switch(choose){
			 case 1:System.out.println("正在进入学员系统....");break;
			 case 2:System.out.println("正在进入管理员系统...");break;
			 case 0:System.out.println("正在退出系统...");break;
		 }
			 
			 
		 
	 }
 }

for循环实现猜数字的游戏

 /*
 用for循环实现猜数字游戏
 */
 import java.util.Random;//用于生成随机数
 import java.util.Scanner;
 public class ForGuessTest{
	 
	 public static void main(String[]args){
		 
		 Random ra=new Random();
		 Scanner st=new Scanner(System.in);
		 int res=0;//评定等级
		 //将随机生成的数对100取余
			int tem=ra.nextInt(100)+1;//生成一个1-100的随机变量
			System.out.print("欢迎来到猜数字!");
			System.out.println("将随机生成一个1-100的随机数,请猜出这个数字");
			while(true){
				System.out.println("请输入你猜测的数字:");
				int num=st.nextInt();
				res++;
				if(num>tem)System.out.println("猜大了,再小一点");
				else if(num<tem)System.out.println("猜小了,再大一点");
				else{ 
					System.out.println("恭喜你猜对了!");
					break;
				}	
			}
			if(res==1)System.out.println("你已经独孤求败了!");
			else if(res>1&&res<=6)System.out.println("你还真有两把刷子!");
			else System.out.println("你水平一般啊!继续努力吧!");
	 }
 }

找素数

/*
使用双重for循环打印2-100之间的所有素数
*/
//素数:除了1和本身外没有其余的因数
public class ForPrimeTest{
	
	public static void main(String[]args){
		
		for(int i=2;i<=100;i++){
			boolean flag=true; //标记是否为素数
			for(int j=2;j<=i/2;j++){//这是一个优化
				if(i%j==0){
					flag=false;//更新不为素数
				break;
				}
			}
			if(flag==true)System.out.println(i);
		}
	}
}

利用逆拆分法逆向输出输入的数

/*
用户输入任意一个正整数,并将其逆序输出
*/

//逆向拆分实现对任意数的拆分
import java.util.Scanner;
public class WhileReverseTest{
	
	public static void main(String[]args){
		
		Scanner st=new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int num=st.nextInt();
		//边拆分边打印
		//while(num>0){
			//System.out.print(num%10);//拆分个位数
			//num/=10;//拆分个位数 
		//}
		//将输出储存最后输出
		int res=0;
		int tem=num;
		while(tem>0){
			res=res*10+tem%10;
			tem/=10;
		}
		System.out.println(num+"逆序后的结果为:"+res);
	}
}

数组

栈用于储存程序运行中声明的所有局部变量
堆用于储存由new关键字创建的数组和对象

在数组的储存中,栈中的数组名实际上是储存堆内存的地址(即数组的首地址)

数组元素的插入

  /*
  实现数组的插入操作
  */
  
  public class ArrayTest{
	  
	  public static void main(String[]args){
		  
		  int []a={1,2,3,0};//数组静态初始化
		  //在下标为0的位置插入5
		  for(int i=a.length-1;i>0;i--)
			  a[i]=a[i-1];
		  a[0]=5;
		  for(int i=0;i<a.length;i++)
			  System.out.println(a[i]);
		 
	  }
  }

数组元素的删除

  /*
  实现数组的插入操作
  */
  
  public class ArrayTest{
	  
	  public static void main(String[]args){
		  
		  int []a={1,2,3,6};//数组静态初始化
		  //在下标为0的位置插入5
		 //将下标为0的元素删除,最后一个位置设置为0
		 for(int i=0;i<a.length-1;i++)
			 a[i]=a[i+1];
		 a[a.length-1]=0;
		 for(int i=0;i<a.length;i++)
			 System.out.println(a[i]);
		 
	  }
  }

数组的优缺点

  • 可以通过下标快速访问指定位置的元素
  • 要求元素的数据类型相同
  • 数组要求内存空间必须连续,并且长度固定就不能更改
  • 增减或者删除大量元素时,效率低下

数组的复制

 /*
 将第一个数组的中间三个元素赋值到第二个数组中
 */
 public class ArrayCopyTest{
	 
	 public static void main(String[]args){
		 
		 int []array={1,2,3,4,5};
		 int []brray=new int [3];
		// brray[0]=array[1];
		 //brray[1]=array[2];
		 //brray[2]=array[3];
		 
		 //赋值优化之for循环
		 for(int i=0;i<brray.length;i++)
			 brray[i]=array[i+1];
		 
		 for(int i=0;i<brray.length;i++)
		 System.out.println(brray[i]);
	 }
 }

案例分析

/*
利用数组实现正整数中每个数字出现次数从统计
*/

//利用后拆分法拆分整数
import java.util.Scanner;
public class ArrayCountTest{
	
	public static void main(String[]args){
		Scanner st=new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int num=st.nextInt();
		int []tem=new int[10];//建立一个数组储存整数每个数字出现的次数
		while(num>0){
			tem[num%10]++;//取出该该位数
			num/=10;//丢弃该位数
		}
		for(int i=0;i<10;i++){
			if(tem[i]>0)//说明该数出现了
			System.out.println(i+"出现了"+tem[i]+"次");
		}
	}
}

数组工具类

/*
编程实现数组工具类的使用
*/
import java.util.Arrays;//导入该类的包
public class Main{

    public static void main(String[]args){

        int num[]={2,4,5,4};//静态初始化数组
        //java工具类之数组打印
        //System.out.println("数组中的元素为:"+Arrays.toString(num));
        //由类名直接调用,该方法为静态方法

        //java工具类之用任意数填充数组
        Arrays.fill(num,0);//将num数组用0填充
       for(int i=0;i<num.length;i++)
           System.out.println(num[i]);
       Arrays.toString(num);
       int []a={0,0,0,0,-1};
       System.out.println(Arrays.equals(num,a));

    }
}
/*
用数组工具类排序和查找
*/
import java.util.Arrays;
public class Arraysort{
	public static void main(String args[]){
		
		int a[]={2,3,34,6,7};
		Arrays.sort(a);//将数组排序(从小到大)
		System.out.println(Arrays.toString(a));
		System.out.println(Arrays.binarySearch(a,34));//返回34的数组下标
	}
}

二维数组

不齐二维数组

面向对象编程

面向对象指以属性和行为的观点去分析现实中的事务
在面向对象时只分析该对象是否具备该属性和行为

类名当由多个单词构成首字母必须大写

当成员变量由多个单词构成时,第二个单词必须大写,成员方法名也一样

引用变量主要用于记录对象在堆区的内存地址信息,便于下次访问

类的成员变量初始值通常省略不写

可变长参数

  /*
  编程实现可变长参数的使用
  */
  public class ChangeArgument{
	  //将name参数看成数组,即可以为0-n个参数
	  //当不确定一个参数传入的数量时使用
	  public void argument(String... name){
		  
		  for(int i=0;i<name.length;i++)
			  System.out.println(name[i]);
	  }
	  
	  public static void main(String[]args){
		  ChangeArgument ar=new ChangeArgument();
		  ar.argument("hi","hjdhd","jdidi");
		  
	  }
  }

当我们自己写了构造方法,编译器则不提供默认的构造方法

  • 构造方法的价值在对象实例化的同时给对象赋值

this关键字

  1. 若在构造方法中出现this 表示正在构造的对象
    2.若在成员方法中出现this 表示正在调用的对象

this关键字本质上为当前类类型的引用

在成员方法中调用成员变量没有写"对象."实际上是隐藏了this.(this为该对象的引用,可以代表当前对象)

3.当函数参数和属性名同名,用this强调区分
4.this 可以作为方法的返回值返回正在调用 的对象(用的不多)
5.在构造方法的第一行可以调用本类中的其他构造方法(了解,开发中用的不多)

对象只声明没有实例化会出现空指针异常

代码的拆分

将main单独写在测试类中
将程序拆分成功能类和测试类,编译测试类的时候,会将功能类一起编译

封装
acwing 特辑
package可以认为写的是代码的文件路径
每一个程序里面只能定义一个public class
procted 表示只能在当前类的子类中访问

对象的多态性:同一个类的不同对象进行同样调用同样的行为,但其表现不同,(子类和父类调用同一个行为时存在)

标签:java,语言,int,基础,System,println,public,out
From: https://www.cnblogs.com/swtaa/p/16756829.html

相关文章

  • Java02 前递增(减)和后递增(减)运算的区别
    ++运算符把它的单个操作数增加1,这个操作数必须是变量、数组中的元素或对象的字段。这个运算符的行为取决于它相对于操作数的位置。放在操作数之前,是前递增运算符,递增操作......
  • java-多线程
    java-多线程 以下内容为本人的学习笔记,如需要转载,请声明原文链接https://www.cnblogs.com/lyh1024/p/16786357.html 多线程1.进程与线程1.1什么是进程程序是指......
  • JavaScript 实现 -- 插入排序
    前言本文主要记录了JavaScript实现--插入排序,以及原理、时间复杂度、空间复杂度和算法稳定性。插入排序插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一......
  • Linux基础
    1.目录结构介绍基本介绍LIunx的文件系统是采用层式的树状目录结构,在此结构中的是最上层是根目录/,然后在次目录下在创建其他目录。在Liunx世界里,一切皆为文件树状目......
  • windows 下java-jar启动的jar包怎么停
     1用管理员打开cmd命令窗口2输入:netstat-ano|findstr端口号92333根pid删除命令taskkill/t/f/pid2136  ......
  • python基础-较复杂数据类型预览
    1.初识列表  列表就是队列;  列表是一种有序的,且内容可重复的数据类型;  用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用[];  python中列......
  • IO框架(Java)
    IO框架流的概念概念:内存与存储设备之间传输数据的通道流的分类按方向输入流:将<存储设备>中的内容读入到<内存>中(read)输出流:将<内存>中的内容写入到<存储......
  • Javaweb实现后端的jdbc增删改查之查询
    首先jdbc就是Java提供给数据库的接口,jdbc通过sql语句实现对数据,数据库等的操作,今天学习了通过代码实现连接数据库和对一张表的查询。1.首选的在数据库(test)中新建一张表(tb_......
  • Java 类型转换
    1、什么是类型转换?在java中类型转换是一个非常重要的知识点。因为java是一门强类型语言,所以在数据运算中会存在类型转换,首先我们需要知道java中的类型转换一共分为两类:自......
  • Java中常用的几种for循环
    List<String>list=newArrayList<String>();list.add("HOLLEWORD!");list.add("HOLLEKITTY!");/***第一种循环方法......