Java新手笔记

正文之前:据说学习Java时发帖子能加快学习效率,以下是我学习时整理的一些笔记和自己写的一些代码,希望得到大佬指正。
别的先不说。先把这个整上!

public class HelloWorld{	
	public static void main(String[] args){
		System.out.println("HelloWorld!");
	}
}

~~一个源文件只能有一个公共类(public),且文件名与该类同名
~~命名规范:类名首字母大写;方法和标识符第一个单词小写,从第二个单词开始,首字母大写
~~成员变量:方法外部,类的内部定义的变量,从属于对象,生命周期随对象始终。
若不主动初始化(赋值),他会自动初始化为默认值(int 0;double 0.0;char “\000”;boolen "false
~~常量命名:全部使用大写和下划线
~~八进制 O开头 十六进制 Ox/OX开头 二进制 Ob/OB开头
~~float 单精度,精确七位有效数字 double 双精度,14位
~~浮点型默认位double,单精度定义:float f=3.14f/3.14F; (F不能省略)
~~浮点数不能用于比较,不精确
~~遇到运算符时,char类型自动通过Unicode转为数字
~~二元运算符中,若两个操作数中有一个lang型,则结果位lang型,否则位int型
取余运算中,结果符号与左边的操作符相同
~~b=a++; //先b=a,再a++ b=++a;//与前边相反,先++a,再b=a
~~&&短路与,有F则F ||短路或,有T则T ^异或,同则F,异为T ,&与, |或, !非
~~位运算: 3 0011 <<左移运算,相当于乘以2
                   4 0100 eg:3<<1=6; 3<<2=12;
                   & 0000 >>右移一位,相当于取半
                    | 0111 ~取反(反码,补码)
                   ^ 0111
~~“+”字符连接符,“+”左右两边只要有一个位字符串,则表此意
~~x?y:z 若x位T,则返回y,否则返回z
~~键盘输入:String scr = scanner.nextLine();
读取字符串,但是如果作为第二次读取,他会读取第一次输入时按的回车键解决办法:空读取一次,不把其赋予给任何变量。scanner.nextLine();

import java.until,Scanner;
public class ScannerTest{
	public static void main(String[] args){
	Scanner scanner=new Scanner(System.in);
	String name=scanner.nextLine();
	int age=scanner.nextInt();
	}
}

String scr = scanner.nextLine();读取字符串,如果作为第二次读取,他会读取第一次输入时按的回车键解决办法:空读取一次,不把其赋予给任何变量。
在函数中,声明了一个 scanner 对象,并且调用了 close 方法,再次启动 scanner 的时候(或者在另一个函数中重新启动 scanner 时),就会遇到异常!
解决办法:使用多次Scanner get=new Scanner(System.in); 但是只在最后使用 get.close() 函数;
或者将Scanner get=new Scanner(System.in); 放在所有函数外层,同时在前面加上static修饰符,并且只在最后使用 iter.close() 函数!
~~new 对象;//new的是对象,每次new的对象都不相同(可以相等),因为他们的地址不相同,即使他们同名;
~~this用于区分全局变量和局部变量(重名时)

void thistest(int x){
	this.x=x;	this.x表示对象的x属性,x表示传入的形参
}

     可以用于调用本类中的同名方法(只能放在第一句)
     不能用于static方法中
     this表示当前执行此方法的对象(this时形参)
     无参方法中默认存在this对象,方法中找变量,先在本方法中找,若找不到则找this
~~静态(static)方法和静态变量从属于静态类,及存在静态方法的类即为静态类,静态类只能使用静态方法,非静态类无限制
    静态初始化块:static{内容
                                        }
    静态初始化块在main中优先执行,即使main中的代码无意义
~~extends继承类只能有一个直接父类,final类无法被继承,接口(interface)可以多继承
    继承不能能使用父类的static方法/属性和构造方法
    选中+ctrl T;//查看类型层次
    方法返回值:子类<=父类
   ibject类时所有Java类的父类
   toString()方法是object类的一个方法
   print(x)为println(x.toString())改写toString()方法更改打印格式
   equals()时object类的一个方法,u1.equals(u2); //u1==u2?
    改写equals()方法更改判断标准
   super.x();super.x;调用父类的方法或属性(改写后也可以使用)
   构造方法第一句总是super(……)来调用父类对应的构造方法(可以不写)
~~封装

同类同包子类所有类
private1
default11
protected111
public1111

   private表示私有,只有自己类中的可用
   default表示无修饰(默认),只有同包可用
   protected表示可以被同包与其他包子类可用
   public表示该项目所有包中所有类均可用
~~final修饰变量:使变量转为常量不可再次赋值
           修饰方法:使方法不可被子类重写,但可以重载
           修饰类: 使类不可被继承
~~数组 长度确定,数组也是对象,元素是成员变量
    数组对象成员是可以改变的(与字符串不同),改变后,地址不变,仍是同一个对象
   数组的初始化

      声明    type[] arr=name; type arr=name[]; //两种方法都可以
      初始化   type[] arr_name=new type[n];  //n为长度
      数组默认变量length  add.length   //数组的长度
      静态初始化  int[] arr={2,4,6}
    		 User[] arr={new User(1001,"张三"),new User(1002,"李四")}
      默认初始化  int[] arr=new int[3];   //三个元素为0(null……)
      动态初始化  int[] arr=new int[3];arr[0]=1;arr[1]=2;arr[2]=3;
      遍历(初始化/读取)  for(int i=0;i<=arr.length;i++){}
   		        for-each循环:专门用来读取数组或者所有的元素(遍历)
      				     for(type m:arr){print(m);} //type为数组元素类型,m为形参,arr为数组名

~~可视化窗口

import java.swing.JFrame;
  public Ax class extends JFrame{     //JFrame自带解决窗口闪烁问题,但效率较差(改回Frame,使用双缓冲)
     public void launchFrame(){
        this.setLocation(WINDOW_x,WINDOW_y);  //窗口左上角位置
        this.setSize(WINDOW_WIDTH,WINDOW_HEIGHT); //窗口大小
        this.title("Ax");    //窗口名字
        this.setVisible(true);    //窗口可视,默认为false
        }
     }
  public static void main(String[] args){
      Ax f=new Ax();  //newAx对象
                }

~~抽象(abstract) 抽象方法存在的类就是抽象类,即抽象方法只存在于抽象类中,抽象类中也可以存在非抽象方法
    抽象方法在抽象类中不能实现,在子类中必须实现
    严格限制子类的设计,使子类之间更加通用
    抽象类不能实例化,即不能通过new实例化,可以new子类
    抽象类只能被继承
    抽象类的意义:为子类提供统一的规范的模板,子类必须实现
~~接口(interface) 接口比抽象类更抽象,接口中有且仅有抽象方法
     接口更加规范的对子类进行约束,全面的专业的实现了规范与具体实现的分离
    例如:造房子时,图纸与房子实体的分离
     接口被实现(implement)类似于继承,从而实现方法,接口可以多继承,类只能单继承
     接口实现两个接口,若某变量被初始化为一个父类,则不能使用另一个父类的方法
     接口可以设置常量,不能有变量,且得大写
~~字符串 字符串对象不可能发生改变,只有对其操作然后赋值给另一个字符串
     字符串的拼接用"+"来完成,例如:String str=“abc”+“def”;
     "+"左右两边只要有一个是字符串,他就是连接符,不是运算符
     字符串的两种创建方式:String str1=“abc”;
                                             String str2=new String(“abd”);
     str1和str2是一样的,打印出来也是一样的,但是他们逻辑判断不相等,因为他们不是同一个对象,地址不同
     通常比较字符串是否相同时,使用equals:str1.(equals(str2))==true;
     String常用方法:

    System.out.println(s.charAt(n)); //打印字符串s下表为n的值s[n];
    s.length();  //字符串长度
    s1.equals(s2); //比较是否相同,不是比较相等
    s1.equalsIgnoreCase(s2);//比较相同,忽略大小写 
    s1.indexOf("AJ"); //s1中是否包含“AJ”,返回第一次出现的位置,不考虑次数
    s2=s1.replace("_","&");//符号替换,前边替换后边,实际s1不会发生改变
    s.startWith("How"); //字符串是否以“How”开头
    s.endWith("you"); //字符串是否以“you”结尾
    s.subString(n); //从下标n截取至结尾
    s.subString(m,n); //从下标m截取到下标n
    s=s.s1toLowerCase();//全转小写
    s=s.toUpperCase(); //全转大写
    s=s1.trim(); //去除字符串首尾空格,中间的不去除

    可修改字符串:

   //StringBuider线程不安全,效率较高(优先考虑使用它),StringBuffer线程安全,效率较低
   StringBuider str11=new StringBuider("abcdef"); //由此创建的字符串对象,可以被改变
   str11.setCharAt(m,value); //修改str11下标为m的值为value
   str.append(String/Int……)//重名方法,在str后添加元素,地址不变
   str.reverse();  //将str中的元素倒置
   str.insert(m,Char1);  //在str中从下标m插入Char1
   str,insert(m,Char1).insert(n,Char2)……;//可以无限写,链式调用,核心就是,该方法调用了return this。
   str.delete(m,n);  //删除下标m-n片段,不包括n

    数组的拷贝:
    System.arrayCopy(src,srcPos,dest,destPos,length);
    //其中src是被原数组,srcPost是原数组拷贝起始下标,dest是目标数组,destPost目标数组拷贝起始下标,length是拷贝长度
    根据数组的拷贝演变的操作:
    删除数组:本质还是拷贝,拷贝到自己身上也是可以的,代码中令dest=src
    源代码:

public static void delete(String[] str,int m,int n) {   //删除数组str中第m到第n个元素
  
  if(m<=str.length&&m>=0&&n>=0&&n<=str.length) {    //判断m和n是否在合理范围内
   
  }else {
   System.out.println("错误!!!");
  }
  
  if(n-m==str.length-1) {          //元素全部删除
   str=null;
  }else if (n-m>=1&&n-m<=str.length-1) {
   System.arraycopy(str, n, str, m-1, n-m+1);    //拷贝操作
   for (int i =str.length+m-n-1; i < str.length; i++) { //多余元素置空
    str[i]=null;
   }
  }else {
   System.out.println("错误!!!");
  }
  
  
 }

    数组扩容:本质是定义一个更大的数组,然后全部拷贝进去
    源代码:

 public static void addCapacity(String[] str,int x) {   //将数组str扩大x个元素
  
  	String[] str1=new String[str.length+x];
  	System.arraycopy(str, 0, str1, 0, str.length);
 }

~~冒泡排序法
原理:比较相邻两个元素,当顺序不对时,进行调换,全部调换结束即可在一端得出最大或最小元素
例如:51432
           15432 14532 14352 14325 //第一轮得出最大的5
           14325 13425 13245 //第二轮得出4
           13245 12345 //第三轮得出3
           12345
源代码:

public static int[] Sort(int[] a) {
  int temp;
  
  for (int i = 0; i < a.length-1; i++) {
 	 boolean flag=true;       //用于判断是否发生了元素换位置,换位置时为0
 	 for (int j = 0; j < a.length-1-i; j++) { //此处“-i”的作用:因为上一轮已经得出i个最大的数,此轮可以少循环i次
    
   		 if(a[j]>a[j+1]) {
  		 temp=a[j];
    		a[j]=a[j+1];
    		a[j+1]=temp;
    		flag=false;
   		 }
  	 }
   
  	while (flag) {       //不换需要换位置为1,结束循环,减少运行时间
    			break;
   			}
  }
  
 return a;
 } 

~~折半查找(二分法查找)
    原理:在一个从小到大的标准数组arr,查找元素key,取数组中间的元素mid与key比较,若相等则查找成功,若key小于mid,则在mid前的元素中查找,若key大于mid则在mid后边的元素中查找,不断执行这段操作,直至成功或失败。
    源代码:

public static int binarySearch(int[] arr,int value) {
  
  int low=0,high=arr.length-1;		//数组首位下标
  
  while(low<=high) {
	int mid=(low+high)/2;  		//中间元素下标
     	if(arr[mid]==value) {
       		return mid+1;		//当mid等于value时,返回mid的位置
   		}
   	if(arr[mid]<value) {		//当mid小于value时,在mid后边的元素中查找
		low=mid+1;
   		}
   	if(arr[mid]>value) { 		//当mid大于value时,在mid前边的元素中查找
   		high=mid-1;
   		}
   
 	}
  return -1;				//查找失败
 }

~~关于时间Date:
    Date d=new Date(n);//1970.1.1 00:00:00+n毫秒的时间(有考虑时区)
    Date d2=new Date();//当不输入n的值时,表示当前的时间
        d2.getTime(); //返回当前时间经历的毫秒数(d中的n)
        d2.after(d); //判断d2是都在d之后(before为之前)

暂时就这么多,随时跟进学习,随时更新~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值