Java基础学习笔记第一部分

目录

java基础笔记第一部分

1.switch语句case穿透

小驼峰命名法:方法,变量

大驼峰命名法:类

常量

变量

 java运算符优先级

IDEA中内容辅助和快捷键

Java中内存分配

数组动态初始化

数组静态初始化

形参和实参

方法重载 方法重写 构造方法

方法的参数传递基本类型

方法的参数传递引用类型 ​

三元运算符

for循环语句的使用

break,return,continue区别

foreach语句 

变量的作用域

循环体内外变量声明利弊分析

封装

API

if和switch语句的区别

String的比较不同用法区别比较

 String直接拼接内存图

StringBuider

StringBuider和String相互转换

集合


java基础笔记第一部分



1.switch语句case穿透

没有break语句

switch(month){
    case 1: 
    case 2:
    case 12:
        System.out.println("冬季");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("春季");
    default:
    System.out.println("输入有误");
}​

switch支持的表达式可以是byte short char int类型以及对应包装类基本类型以及枚举和String类型

case匹配的表达式可以是常量表达式和枚举常量

小驼峰命名法:方法,变量

一个单词,首字母小写

name

多个单词,首字母之后的首字母大写

firstName

大驼峰命名法:类

一个时首字母大写

Student

多个时,每个单词首字母大写

GoodStudent

常量

不可改变的量

  • 字符串常量    “hello” 
  • 整数常量 66 -6
  • 小数常量  13.14 -5.21
  • 字符常量 ‘a’
  • 布尔常量  true false
  • 空常量   null   (不可以直接输出)

变量

  本质上就是内存上的一小块区域

  在程序运行过程中,其值可以发生改变的量

格式:

变量类型  内存中的暂存位置(变量名)= 变量值

 java运算符优先级

表1 运算符的优先级
优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 «、»、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左
 

IDEA中内容辅助和快捷键

快速生成语句

    生成main方法:psvm,回车

    输出语句:sout ,回车

内容辅助键

 Crtl+Alt+space(内容提示,代码补全等)

生成对应接收类型

crtl+alt+v 生成相应的接受字符类型

快捷键

 注释

  单行 crtl+/

  多行Crtl+Shift+/

格式化

  Ctrl+Alt+L

Java中内存分配

int  i1=1;
int  i2=2;

String a1=new String("china");
string a2="china";

多个数组指向相同内存

 

数组动态初始化

int [] arr = new int[3];

arr[0]=10;

arr[1]=10;

arr[2]=10;

数组静态初始化

int [] arr  = new int[] {1,2,3};

简化版

int [] arr = {1,2,3};

形参和实参

形参:方法定义中的参数

实参:方法调用中的参数

方法的注意事项

1.方法不可嵌套定义 

2.void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据

方法重载 方法重写 构造方法

方法重载

同一个类中多个方法有相同的方法名,不同的参数数量,类型。与返回值无关

在调用的时候,java虚拟机会根据方法的参数不同来区分同名的方法

方法重写

子类继承父类时方法名返回值类型等全部相等,但是方法体不相同,注意事项有:

私有方法不能被重写(父类私有成员子类是不能继承的)

子类方法的访问权限不能更低(public>默认>私有)

构造方法

方法名为类名无返回值类型,可以有参和无参,修饰符 类名(){}

作用:初始化

注意:如果没有系统会给出默认的无参构造方法,如果给出则默认失效

如果定义了带参构造方法还要使用无参构造方法就必须再写一个无参构造方法

推荐无论是否使用都手工书写无参构造方法

方法的参数传递基本类型

对于基本数据类型的参数,形式参数的改变,不影响实际参数的值

public class ArgsDemo01{
    public static void main(String [] args){
        int number=100;//栈内存加载main方法基本数据类型number=100
        syso("调用change方法前:"+number);
        change(number);//再次在栈内存中加载change基本数据类型number=100,使用后就消失
        syso("调用change方法后:"+number);
    }//main方法结束,main方法基本数据类型number消失
    public static void change (int number){
        number = 200;
    }
}
//第一次输出100
//第二次输出100

方法的参数传递引用类型

 

对于引用类型的参数,形式参数的改变,影响实际参数的值。

三元运算符

格式:关系表达式?表达式1:表达式2

如果关系表达式值为true执行表达式1,值为false执行表达是2

a>b?a:b

for循环语句的使用

格式:

for(初始化;条件判断;条件控制){

//循环体语句

}

初始化:一条或者多条初始化操作。

条件判断:一个结果值为Boolean类型的表达式。

循环体语句:任意反复执行的语句。

条件控制语句:通常使用一条语句来改变变量的值,如j++,i++。

例如:

for(int start=0,end=arr.length-1;start<=end;start++,end--){
    int temp=arr[start];
    arr[start]=arr[end];
    arr[end]=temp;
}

break,return,continue区别

 1、return :直接跳出当前的方法,返回到该调用的方法的语句处,继续执行

return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

 2.   break:在循环体内结束整个循环过程(一般配合if语句使用,使用break语句时必须要有循环包裹,不然编译报错)

break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。 break不仅可以结束其所在的循环,还可结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。Java中的标签就是一个紧跟着英文冒号(:)的标识符。且它必须放在循环语句之前才有作用。

 3.  continue :结束本次的循环,直接进行下一次的循环

outer:for (int i = 0 ; i < 5 ; i++ ){
      // 内层循环
      for (int j = 0; j < 3 ; j++ ){
        System.out.println("i的值为:" + i + " j的值为:" + j);
        if (j == 1){
          // 跳出outer标签所标识的循环。
           break outer;
        }
      }
    }

foreach语句 

//for(元素类型 元素名:数组名){
//    语句
//}
for(String s : a) {
        	System.out.println(s);
        }

变量的作用域

变量是有作用范围(Scope)的,也即作用域。一旦超出变量的作用域,就无法再使用这个变量。在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域。

按作用域范围划分,变量分为成员变量和局部变量。

(1)成员变量

在类体内定义的变量称为成员变量,它的作用域是整个类,也就是说在这个类中都可以访问到定义的这个成员变量。

(2)局部变量

在一个方法或方法内代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。局部变量在进行取值前必须被初始化,否则会编译错误。

Java存在块级作用域,在程序中任意大括号包装的代码中定义的变量,它的生命仅仅存在于程序运行该代码块时。

例如:for循环、while循环、方法或方法的参数列表里。在循环里声明的变量只要跳出循环,这个变量便不能再使用。同样,方法或方法的参数列表里定义的局部变量,当跳出方法体之外,该变量也不能使用了。

具体区别:

  1. 类中位置不同

    成员变量:类中方法外的变量

    局部变量:方法中的变量

  2. 内存中位置不同
    成员变量堆内存
    局部变量栈内存
  3. 生命周期不同
    成员变量随着对象的存在而存在,随着对象的消失而消失
    局部便两个随着方法
  4. 初始化值不同
    成员变量由于再堆内存中所以有默认的初始化值
    局部变量在栈内存中没有默认的初始化值,必须先定义,赋值,才能使用

循环体内外变量声明利弊分析

 利弊分析:

首先,变量的bai声明是在栈中进行的,du而实例化则是zhi在堆中,故栈中只有基础数据与实例的dao引用。
故上面程序的不同点zhuan:
1、在外面的定义的变量,只在栈中声明了一次。
2、在里面的定义的变量,循环多少次就在栈中声明了多少次。
3、在内存或说资源节省方面,肯定是在外面定义较好,是摧荐的写法;但是如果循环数不大,其实也者体现出来的差别也不大。(浏览博客有说编译会有优化的,所以感觉还是没有多大影响,主要还是一个习惯问题,尽量声明在循环体外)
4、由于实例化的对象都在堆中,故个人认为以上两个基本一样。

封装

private关键字

修饰成员变量和成员方法,保护成员不被别的类使用,被private修饰的成员只在本类中才能访问

针对private修饰的成员变量

提供getXxx变量名()方法获取变量的值,方法用public修饰

提供setXxx变量名(参数)方法设置成员变量的值,方法用public修饰

这两个方法存在的意义就是为了在方法中设置条件

this内存原理

方法被哪个对象调用,this就指向哪个对象内存地址

API

java api为jdk提供的各种功能的java类,

if和switch语句的区别

if(ch>a&&ch<z){
    smallCount++;
}else if(ch>A&&ch<Z){
    bigCount++;
}else if(ch>1&&ch<9){
    numberCount++;
}

用switch代码块实现

switch(ch){
 case:'a'
    smallCount++;
    break;
    ....
 case:'A'
     bigCount++;
     break;
 case:'1'
     numberCount++;
     break;
 default 
     System.out.println("非法输入");
}

从上面可以看出,if else 语句是一句一句的匹配条件进行,而switch语句使用匹配case块进行。

String的比较不同用法区别比较

 String a ="zxl";
		String e="zxl";
		char [] c = new char[] {'z','x','l'};
		String b=new String(c);
		String d=new String(c);
	    System.out.println(a);
	    System.out.println(b);
	    System.out.println(d);
	    System.out.println(e);
	    System.out.println("a和b的值相同吗:"+a.equals(b));
	    System.out.println("a和b的地址相同吗:"+(a==b)); //由于+运算优先级大于==,所以会先计算a+前面的字符再和后面的b比较
	    System.out.println("b和d的值相同吗:"+b.equals(d));
	    System.out.println("b和d的地址相同吗:"+(b==d));
	    System.out.println("e和a的值相同吗:"+e.equals(a));
	    System.out.println("a和e的地址相同吗:"+ "" + (e==a));
	    
	   /* 运行结果
	    zxl
        zxl
        zxl
        zxl
        a和b的值相同吗:true
        a和b的地址相同吗:false
        b和d的值相同吗:true
        b和d的地址相同吗:false
        e和a的值相同吗:true
        a和e的地址相同吗:true
	   */ 

 String直接拼接内存图

StringBuider

String 是不可变的

StringBuider是可变的

两个常用构造方法

Public StringBuider();
//创建一个空白可变字符串对象,不含有任何内容
public StringBuider(String str);
//根据字符串的内容,来创建可变字符串对象​

常用方法

publicStringBuider append(任意类型);//添加数据,并返回对象本身
public StringBuider reverse();//返回相反的字符序列


StringBuider sb = new StringBuider();
sb.append("hello");
sb.append("world");
sb.reverse();
System.out.println(sb);
//输出
//dlrowolleh

StringBuider和String相互转换

StringBuider转换为String,使用toString方法。

//pubic String toString();
StringBuider sb = new StringBuider();
String s = sb.toString(sb);
System.out.println(s);

String转换为Stringbuider,使用构造方法、

//pubic String toString();
StringBuider sb = new StringBuider();
String s = sb.toString(sb);
System.out.println(s);

集合

提供一个储存空间可变的储存模型,存储的数据容量可以发生改变

ArrayList<E>

可调整大小的数组实现

<E>是一种特殊的数据类型,泛型

public ArrayList();创建新的集合对象

public boolean add(E e);将指定的元素追加到此集合的末尾

public void add(int index,E element); 在此集合中的指定位置插入指定的元素

 常用方法

public booblean remove(Object o)  删除指定的元素,返回删除是否成功

public E remove(int index) 删除指定索引处的元素,返回被删除的元素

public E set(int index, E element) 修改指定索引处的元素,返回被修改的元素

public E get(int index); 返回指定索引处的元素

public int size();返回集合中的元素个数


学习Java的小白,这是我学习过程中记得笔记,很基础,但我认为也很重要,如果有哪里不对的地方,还请大佬指正一下!!

还有,本文为原创文章,未经允许不得转载发布!!

猜你喜欢

转载自blog.csdn.net/weixin_44495941/article/details/114004500