2.JAVA入门基础知识
数据类型:
java的数据类型分为两大类:基本类型和引用类型
基本类型:
整数类型:
- byte 一个字节 -128-127
- short 2个字节 32768-32767
- int 4个字节 很大
- long 8个字节 巨大 用long的时候赋值要在数字后加 L
扩展:
public class HelloWorld {
public static void main(String[] args) {
int i=10; //10进制
int i2=010; //八进制 八进制0开头
int i3=0x10; //十六进制 十六进制0x开头
int i4=10_00001_23; //JDK7新特性,数字之间可以用下划线分割,且输出的时候不会被输出
}
}
浮点类型:
- float 4个字节 用float的时候赋值要在数字后面加 F
- double 8个字节
扩展:最后完全避免使用浮点数进行比较
字符类型:
- char 2个字节 只能发一个字符
String 定义字符串 不是关键字来的,是类
扩展:所有的字符本质还是数字即ASCII编码
转义字符:
- \t 多几个空格
- \n 换行
- ....
boolean类型:
- boolean xx= true
其值只有true和false两个
引用类型: 类、接口、数组
类型转换:
数字范围级别:低--------------------------------------------->高
byte,short,char --->int --->long--->float--->double
当高级别向低级别转换时,需要强制类型转换;低级别向高级别转换时,无需任何操作
数据类型按精度(容量)大小排序:
自动类型转换:
精度小的类型自动转为精度大的数据类型,这就是自动类型转换
自动类型转换细节:
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大那种数据类型,然后再计算
- 当把精度(容量)大的数据类型赋值给精度(容量)小的数据类型,会报错;反正会进行自动类型转换
- (byte、short)和char之间不会相互自动转换
- byte、short、char 它们三者可以计算,在计算时首先转换为int类型
- boolean不参与转换
- 表达式结果的类型自动提升为操作数中最大的类型
强制类型转换:
强制转换: (类型)变量名
注意:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干类型
- 在把高容量转换到低容量时,需要强制类型转换。此时会出现内存溢出或者精度问题
- 不同类型的数字相结合成为一个新的数字时,得出的结果按最高的级别来算,最低只能是int
public class HelloWorld {
public static void main(String[] args) {
int i=10_0000_0000;
int b=20;
long sum=i*b; //结果是负数,原因是i*b之后还是int类型,然后溢出了
long sum1=i*((long)b); //结果是正数,先把一个数转化为long 结果i*b之后就算long
System.out.println(sum);
}
}
变量与常量:
变量分为类变量、实例变量、局部变量
public class HelloWorld {
//类变量 static
static double salary= 2000;
//实例变量:从属于对象;若不进行初始化,则为默认值,整数0 浮点数0.0 布尔值false 除了基本类型其余都是NULL
int a;
//main方法
public static void main(String[] args) {
//局部变量:必须声明且初始化,有效范围只在方法內
int i=10; //局部
//变量类型 变量名字 = 值 使用实例变量必须new
HelloWorld text = new HelloWorld();
System.out.println(text.a);
//类变量 static 类变量可以直接用
System.out.println(salary);
}
//其他方法
public void add(){
}
}
常量:
格式:final 常量名 =值; 常量名一般用大写字符
public class HelloWorld {
//修饰符,不存在先后顺序,所以可以改为final static
static final double PI=3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量的命名规范:
- 类成员变量:首字母小写和驼峰原则(除了第一个单词外,后面的单词首字母大写)myName
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:MyName
- 方法名:首字母小写和驼峰原则:myName()
运算符:
数字范围级别:低--------------------------------------------->高
byte,short,char --->int --->long--->float--->double
不同类型的数字相结合成为一个新的数字时,得出的结果按最高的级别来算,最低只能是int
关系运算符:返回值是true或false
public class HelloWorld {
public static void main(String[] args) {
int a=10;
int b=20;
//字符串连接符 + 当出现字符串时,会把字符串后的内容转化为字符串,并进行连接
System.out.println(""+a+b); //结果1020
System.out.println(a+b+""); //结果30
}
}
Scanner对象:
可以通过Scanner类获取用户的输入
Scanner的用法:
- 导包:import java.util.Scanner; (IDEA上new一下就自动导包了)
- 新建对象:Scanner s new Scanner(System.in); s是变量名,其他都不能改
- 使用对象:
- s.next(); 输入字符串,遇到空格结束 s.nextLine() 输入字符串,遇到回车结束
- s.nextInt(); 输入整数
- s.nextFloat(); 输入浮点数float类型
- s.nextDouble(); 输入浮点数double类型
在一个方法中new了一个scanner对象后,可以给不同的类型进行输入赋值
通过Scanner类的next()与nextLine()方法获取输入的内容,一般读取前需要使用hasNext()与hasNextLine()来判断是否含有相同类型的输入的数据。如hasNextInt() 判断输入的是否是整数
import java.util.Scanner;
//hasNext()的用法
public class doc {
//输入多个数字,算总和和平均数。通过输入非数字来结束
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double sum=0;
int m=0;
while(scanner.hasNextDouble()){ //当我输入到x时 x不是double类型 循环结束
double x=scanner.nextDouble();
m++;
sum+=x;
}
System.out.println("和为:"+sum);
System.out.println("平均值:"+(sum/m));
}
}
next()与nextLine()的区别:
- next()遇到空格就作为分隔符或结束符
- nextLine()以Enter作为结束符 可以获得空白
import java.util.Scanner;
public class doc {
public static void main(String[] args) {
Scanner s =new Scanner(System.in);
System.out.println("使用next方式接收");
//判断用户有没有输入字符串
if(s.hasNext()){ //先判断用户输入的是什么内容
//使用next接收
String str=s.next();
System.out.println("输入的内容:"+str); //输入Hello World 结果为Hello
}
//用完scanner最好关闭
s.close();
}
}
import java.util.Scanner;
public class doc {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("用nextline方式接收");
if(s.hasNextLine()){ //先判断用户输入的是什么内容
//使用nextLine接收
String str=s.nextLine();
System.out.println("输入的内容为:"+str); //输入Hello World 结果为Hello World
}
s.close();
}
}
选择结构:
单选择结构:
if(布尔表达式){ //true就执行
}
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
String a=s.nextLine();
//equals 字符串比较
if(a.equals("Hello"))
System.out.println(a);
s.close();
}
}
双选择结构:
if(布尔表达式){ //ture 就执行
}else{ //false就执行
}
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("输入成绩:");
int score=s.nextInt();
if(score>60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
s.close();
}
}
多选择结构:
if(布尔表达式1){ //true就执行
}else if(布尔表达式2){ //true就执行
}else if(布尔表达式3){ //true就执行
}else{ //上面3个表达式都false就执行
}
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int score=s.nextInt();
if(score==100){
System.out.println("满分");
}else if(score<100&&score>=90){
System.out.println("A");
}else if(score<90&&score>=80){
System.out.println("B");
}else{
System.out.println("C");
}
s.close();
}
}
switch多选择结构:
switch(表达式){
case 常量:语句;break;
case 常量:语句;break;
case 常量:语句;break;
default: 语句;break;
}
JDK7的新特性,表达式的结果可以是字符串!
public class Demo {
public static void main(String[] args) {
char grade='C';
switch (grade){
case 'A':
System.out.println("A");
break; //若不写break,会发生case穿透
case 'B': //这个case无break,若执行了,还会穿透到下面的case C
System.out.println("B");
case 'C':
System.out.println("C");
default:
System.out.println("aaaa");
}
}
}
循环结构:
while循环:
while(布尔表达式){
//内容
}
do....while循环:
do{
}while(布尔表达式);
do....while() 至少执行一次
for循环:
for(初始化;布尔表达式;更新){ //初始化不能只写一个变量,必须带上赋值
}
输入循环次数加上 .for 回车自动生成for循环
public class Demo {
public static void main(String[] args) {
int a=1;
int sum=0;
for(a=1;a<=100;a++){ //写成for(a;a<=100;a++) 就报错
sum+=a;
}
System.out.println(sum);
}
}
练练手:
public class Demo {
public static void main(String[] args) {
//输出1-1000之间能被5整除的数,每行输出3个
for (int i = 1; i <= 1000; i++) {
if(i%5==0){
System.out.print(i+"\t"); //print输出后不换行,println输出自带换行
}
if(i%(5*3)==0){ //每行输出3个
System.out.println(); //换行
//System.out.print("\n"); 换行
}
}
}
}
增强for循环:
增强for循环主要用于数组或集合的循环
for(声明语句 :表达式){
//代码句子
}
public class Demo {
public static void main(String[] args) {
int[] numbers={10,20,30,40,50}; //定义数组
//遍历数组的元素
for (int x:numbers){ //numbers数组的每一项遍历出来赋值给了x
System.out.println(x);
}
System.out.println("==============");
//等同于上面的代码
for(int i=0;i<5;i++){
System.out.println(numbers[i]);
}
}
}
break与continue:
break:用于结束循环,不执行了
continue:用于结束这一次循环,进行下一次循环
数组:
一维数组的介绍
数组是相同类型的数据的有序集合,每一个数据成为一个数组元素,每一个数组元素可以通过一个下标来访问
数组是引用类型。它的元素相当于类的实例变量
特点:
- 数组的长度是固定的。一旦被创建,大小不可以改变
- 其元素必须是相同类型
- 数组中的元素可以是任何类型数据,包括基本类型和引用类型
- 数据变量是引用类型,数组也可用看成是对象,数组中的每个元素相当于该对象的成员变量
- 数组本身是对象,数组对象本身是在堆中的
数组的声明创建:
先声明数组变量,然后通过new来创建数组,数字的下标从0开始
public class Demo01 {
public static void main(String[] args) {
//变量类型 变量名字 = 变量的值;
int[] nums1; //声明了一个数组,首选,但是还没分配空间; 可写成int nums2[]; 不推荐
nums1 = new int[10]; //分配空间,创建一个可以放10个int类型数据的数组
int[] nums2=new int[10]; //这一行把定义和new结合,等同于上面2行
nums2[0] = 1; //给数组第0个数组赋值
}
}
数组的声明:
public class Demo02 {
public static void main(String[] args) {
//静态初始化:创建+赋值 不用写new,但是初始化有多少个值,就是数组的长度
int[] a={1,2,3,4,5,6,7,8};
//动态初始化: 创建后,数组元素默认都为0
int[] b=new int[10];
}
}
数组的赋值和遍历:
获取数组的长度用arrays.length (arrays数组变量名)
public class Demo01 {
public static void main(String[] args) {
int[] num=new int[10];
for (int i = 0; i < 10; i++) {
num[i]=i;
}
//遍历输出数组
for (int i = 0; i < num.length; i++) { //num.length 是数组的长度
System.out.print(num[i]+" ");
}
System.out.println();
//增强型for输出数组 没有下标
for (int array : arrays) { //输入数组名.for 快速生成
System.out.println(array);
}
}
}
数组作为方法的参数
public class Demo04 {
public static void main(String[] args) {
int[] arrays={1,2,3,4,5};
printArrays(arrays); //数组作为参数
}
//打印数组 数组作为方法的参数
public static void printArrays(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
}
}
=数组作为返回值
public class Demo04 {
public static void main(String[] args) {
int[] arrays={1,2,3,4,5};
int[] reverse = reverse(arrays);
}
//反转数组 数组作为返回值
public static int[] reverse(int[] arrays){ //定义的方法类型必须也是数组
int[] result =new int[arrays.length];
for(int i=0,j= result.length-1;i< arrays.length;i++,j--){
result[j]=arrays[i];
}
return result; //返回一个数组
}
}
二维数组的介绍
二维数组就是一个数组中存放了其他数组
当初始化一个二维数组时,若某行某列没有赋值,则默认不存在,遍历的时候并不会输出
public class Demo05 {
public static void main(String[] args) {
//定义了一个array[4][2]
int[][] array={{1,2},{2,3},{3,4},{4,5}};
System.out.println(array.length); //输出二维数组的长度是4
System.out.println(array[0].length); //输出二维数组中第一个数组的长度 结果是2
//二维数组的打印
for (int i = 0; i < array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
}
二维数组的增强型for遍历:
快捷操作:array1.for 就自动生成 for (int[] ints : array1) 然后ints.for就自动生成for (int anInt : ints)
public class Demo07 {
public static void main(String[] args) {
int[][] array1 =new int[11][11]; //二维数组的定义
for (int[] ints : array1) { //相当于把array1中的每一个数组赋给了ints
for (int anInt : ints) { //把ints数组中的值赋给了anInt
System.out.print(anInt+" ");
}
System.out.println();
}
}
}
Arrays类
Arrays类包含了多种对数组进行特定操作的方法
使用的时候就 Arrays . 方法(数组名) 就可以直接使用
使用Arrays需时会自动导包 import java.util.Arrays;
Arrays类的方法可以查看JDK帮助文档
常用的有:
- toString 打印数组
- sort 升序排序数组
- equals 比较数组中的元素是否相等
- binarySearch 对排序好的数组进行二分查找
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
int[] a={1,2,3,456,12,4};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
2.JAVA入门基础知识的更多相关文章
- Java 多线程——基础知识
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java必备基础知识(一)
学习的一点建议: 每一门语言的学习都要从基础知识开始,学习是一个过程,"万丈高楼平地起",没有一个好的地基,想必再豪华的高楼大厦终究有一天会倒塌.因此,我们学习知识也要打牢根基,厚 ...
- USB入门基础知识(转)
源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...
- Linux入门基础知识
注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. Linux入门基础知识 1. Unix和Linux发展历史 二者就像父子关系,当然Unix是老爹.1965年,MI ...
- 什么才是java的基础知识?
近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...
- React Native 入门基础知识总结
中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...
- Greenplum入门——基础知识、安装、常用函数
Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709 版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...
- 1)Linux程序设计入门--基础知识
)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...
- java部分基础知识整理----百度脑图版
近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...
- Java入门基础(类)
类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...
随机推荐
- NOIP2019 树的重心
Description \[\sum_{(u,v)\in E}\Biggl(\sum_{x为S_u重心}x+\sum_{y为S_v重心}y\Biggr) \] \(1\leqslant n\leqsl ...
- 关于 indy Idhttp Post数据抛异常 connection closed Gracefully
delphi 使用indy -idHttp 控件post 数据时 会报connection closed Gracefully这个异常的问题. 网上找了很多方法最多的就是 修改: MyHttp.Req ...
- 【CSS】CSS字体图标iconfont
CSS字体图标iconfont展示的是图标,本质上还是字体 使用字体图标步骤: 字体图标的下载 将字体图标引入到HTML 字体图标的追加(以后添加新的小图标) 推荐下载网站 icomoon字库http ...
- MATLAB画图自动确定坐标范围(GUI)
今天在用MATLAB做我的毕设的时候碰到一个很纠结的问题,之所以说纠结是因为我觉得这个问题很简单,可是一时半会就是弄不出来(ー`´ー).鼓捣了半个小时左右吧,终于搞出来了.下面做个纪念: 问题描述 在 ...
- I - Cloud Retainer's Game
I - Cloud Retainer's Game 传送门: I. Cloud Retainer's Game (codeforces.com) 题意: 在坐标轴上有2个边界:y=0和y=H.有n个质 ...
- 西电oj 244题单词排序
题目描述: 定义一个二维字符数组str[10][20],行号表示单词序号,列号表示单词最大长度, 输入一个正整数N(N≤10),表示单词数,使用函数wd_sort()完成单词的排序,按字母顺序从小到大 ...
- 【Leetcode】 剑指offer:栈与队列 --Day01
写在前面 2023届秋招形势严峻,作为2024届本科生倍感压力.时间紧迫,需要加快脚步. 计划之一是在未来的36天时间里通关Leetcode的剑指offer系列算法题.这一系列的学习周期为31天,也就 ...
- 关于proTable设置列固定,始终没有固定的效果的原因
使用proTable设置操作列固定 const columns: ProColumns<IssueItem>[] = [ { title: '操作', valueType: 'option ...
- 看看CabloyJS是如何异步加载并执行go wasm模块的
介绍 CabloyJS提供了一个内置模块a-wasmgo,将go wasm模块的异步加载运行机制进行了封装,使我们可以非常方便的在CabloyJS项目中引入go wasm,从而支持更多的业务场景开发 ...
- 加深印象篇之Servlet
环境配置 需要配置web.xml文件, <web-app> <servlet> <servlet-name>你起的一个类的名字</servlet-name&g ...