zoukankan      html  css  js  c++  java
  • Java笔记记录

    把以前看的内容笔记补起来,保存哈在《Java编程思想》这本书中自己需要了解到的一些问题;从2020这一年开始到现在感觉自己都没有什么长进,无论是算法还是Java或者c;不想颓废,大一上的目标并未实现并且有点惨兮兮,所以现在开始需要好好调整哈了,每天坚持学Java。

    一.操作符

    1.更简单的打印语句

    在一般都是采用

    System.out.println(.....);
    

    在这里引入一个静态导入(static import),创建一个小类库来简化打印语句的编写:

    import java.util.*;
    import static net.mindview.util.Print.*;
    .....
    print(...);
    

    2.对象当中的“赋值”

    对一个对象操作时,实际上就是对对象的引用,所以倘若“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方;

    class Tank{
    	int level;
    }
    
    Tank t1=new Tank();
    		Tank t2=new Tank();
    		t1.level=9;
    		t2.level=47;
    		System.out.println("1:t1.level: "+t1.level+" t2.level "+t2.level);
    		t1=t2;//t1.level=t2.level;(后者主要避免别名)
    		System.out.println("1:t1.level: "+t1.level+" t2.level "+t2.level);
    		t2=t1;
    		System.out.println("1:t1.level :"+t1.level+" t2.level "+t2.level);
    
    

    输出:

    1:t1.level: 9 t2.level 47
    2:t1.level: 47 t2.level 47
    3:t1.level :47 t2.level 47
    

    (2).方法调用当中的别名:

    class letter{
    	float a;
    }
    
    static void f(letter y)
    	{
    		y.a=(float) 45.3;
    	}
    
    letter x=new letter();
    x.a=(float) 63.2;
    System.out.println("1:x.a "+x.a);
    f(x);
    System.out.print("2:x.a "+x.a );
    

    输出:

    1:x.a 63.2
    2:x.a 45.3
    

    3.关系运算符

    3.1."=="与"equals()":

    Integer n1=new Integer(47);
    Integer n2=new Integer(47);
    System.out.println(n1==n2);//false
    System.out.println(n1!=n2);//true
    

    对应上述的结果:虽然对象的内容相同,但是对象的引用却是不相同的,而上述这两个运算符比较的就是对象的引用;所以此时我们的equals()就出场了。

    System.out.println(n1.equals(n2));//true
    

    但是在自己创建的类当中这个答案就又是false;//等到相应的章节时再补解析

    4.短路(以为回到了物理,害)

    boolean b=test1(0)&&test2(2)&&teat3(3);
    当遇到结果是true则继续执行下一个test2(2),如果test2(2)是false则将不会继续执行test3(3);一错全错,惨兮兮,我不要一错再错啦;
    

    5.位运算符

    有:&与、|或、^异或、~非(是一元操作符所以不能与=相联用)、<<、>>、>>>;
    5.1. 关于<<:空位补0,被移除的最高位丢弃,空位补0;
    5.5. 关于>>:被移位的二进制最高位是0,右移后,空缺位置补0; 若最高位是1,空缺位补1;
    5.3 .关于>>>:(无符号位)空缺位都用0补;
    5.4. 关于异或操作符,可以很好的解决一些问题,待我找找以前例题;

    题目是找出只出现过一次的数字。
    class Solution {
        public int singleNumber(int[] nums) {
            int ans = 0;
            for(int num: nums) {//类型 变量:数组//遍历数组
                ans ^= num;//异或运算//运用了交换律a+a=0;a+0=a;a+a+b=b;
            }
            return ans;
    
    
        }
    }
    
    

    5.5 .按位操作符与逻辑运算符有着相同的效果,只是不会像上一次例子那样中途短路;
    5.6 例题:一道老式的面试题:
    最高效的方式计算2*8:

    2<<3或者8<<1
    

    6.截尾与舍入

    将float或者double类型的转换为int的类型时,会对数字进行截尾,如果要想得到舍入的结果,就需要用java.long.Math中的round()方法;

    import java.util.*;
    
    public class J截尾与舍入 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in=new Scanner (System.in);
    		double a=0.7,b=0.3;
    		float aa=0.7f,bb=0.3f;
    		/*
    		 * 截尾
    		 */
    		System.out.println("(int)double a="+(int)a);
    		System.out.println("(int)double b="+(int)b);
    		System.out.println("(int)float aa="+(int)aa);
    		System.out.println("(int)float bb="+(int)bb);
    		
    		/*
    		 * 舍入
    		 * 用java.long.Math中的round()方法
    		 */
    		System.out.println("Math.round(a)="+Math.round(a));
    		System.out.println("(int)double b="+Math.round(b));
    		System.out.println("(int)float aa="+Math.round(aa));
    		System.out.println("(int)float bb="+Math.round(bb));
    	}
    
    }
    

    二.数据的比较(暂时先放在这里)

    1.比较double数据是否相等的方法

    /**
     * 1.比较double数据是否相等的方法
     * @又又
     */
    import java.util.*;
    import java.math.BigDecimal;
    
    public class D第三章操作符 {
    
    	public static void main(String[] args) {
    		/*
    		 * 方法一:若比较的数据精度要求不高,那么就定义一个aa=0.001;
    		 * 对于精度要求不高的,小于0.001的数据都可以认为是等于0;
    		 */
    		final double aa=0.0125;
    		double bb=0.001;
    		if(Math.abs(bb-0)<aa)
    		{
    			System.out.println("true");
    		}
    		else {
    			System.out.println("你个小憨憨,你错啦");
    		}
    		System.out.println(Math.abs(bb-0)<aa);
    		
    		/*
    		 * 方法二:转换成字符串之后用equals方法比较;只适用于比较精度相同的数据;
    		 */
    		System.out.println(Double.toString(bb).equals(Double.toString(aa)));
    		
    		/*
    		 * 方法三:使用BigDecimal类型的equals方法或者compareTo方法;但是要有类加载;
    		 */
    		System.out.println(new BigDecimal(aa).equals(new BigDecimal(bb)));
    		System.out.println(new BigDecimal(aa).compareTo(new BigDecimal(bb))/*==0*/);//==0可写可不写
    	
    	}
    
    }
    

    输出:

    true
    true
    false
    false
    1
    

    equals方法:比较之前先判断要比较的数据类型,对象一致再同时判断精确度和值是否一致;

    compareTo方法:不会比较精确度,把精确度低的那一个对象转换为高精确度,只比较数值的大小;

    三.字符串

    1.访问字符串

    public class S字符串 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in=new Scanner (System.in);
    		String s=new String();
    		s=in.nextLine();
    		/*
    		 * 访问String里面的字符
    		 */
    		System.out.println(s.charAt(0));
    		
    		/*
    		 * 得到字串
    		 */
    		System.out.println(s.substring(1));
    		System.out.println(s.substring(1,5));
    		
    		/*
    		 * 寻找字符,如果没有找到则为-1
    		 */
    		String a="abcdefgh";
    		System.out.println(a.indexOf(98));//得到某个字符所在的位置
    		System.out.println(a.indexOf('a'));//得到某个字符的位置
    		System.out.println(a.indexOf('a',0));//从n号位置开始寻找某个字符(' ',n)
    		System.out.println(a.indexOf("cd"));//找到字符串t所在的位置
    	}
    
    }
    

    输出:

    qwertyu
    q
    wertyu
    wert
    1
    0
    0
    2
    

    从右边开始寻找:
    1.a.lastIndexOf('');
    2.a.lastIndexOf('',n);
    3.a.lastIndexOf(" ");

    2.比较字符串的内容是否相等:

    不能用'==',因为'=='比较的是双方的地址,而不会比较内容;
    应该用equals():进行的是字符串的对象的比较,他的原型是:boolean equals (Object obj);
    

    3.比较大小:

    .compareTo(); >则输出1;<则-1;相等则0.
    总结:

    1.==操作符既可以用于比较基本的数据类型,也可以用于比较对象,而equals只可以用于对象之间的比较。
    2.在比较String类型的对象时,“==”操作符的原理只有两个变量是同一对象的引用时才会返回true,而equals方法只要两个变量的内容相同则返回true。
    3.对象进行比较时,equals方法默认的原理是判断两者的内存地址是否相同,所以默认情况下与“==”操作符返回的结果相同,但是这里应该发现差别,也就是equals方法可以被重写—用户可以定制自己的equals方法,而“==”操作符不能被重写。
    

    四.控制程序流程

    1.for

    public class K控制程序流程 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		for(char c=0;c<128;c++)
    		{
    			if(Character.isLowerCase(c))
    			{
    				System.out.println("value:"+(int)c+"character:"+c);
    			}
    		}
    	}
    
    }
    

    输出结果:

    value:97character:a
    value:98character:b
    value:99character:c
    value:100character:d
    value:101character:e
    value:102character:f
    .....
    

    注:这个程序中使用了java.lang.Character包装器类,这个类不但能把char基本类型的值包装近对象,还提供了别的用法,这里用到了static isLowerCase()方法来检查字母是否为小写;

    2.foreach

    public class K控制程序流程 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		for(char c:"liyouyou".toCharArray())
    		{
    			System.out.print(c+" ");
    		}
    	}
    
    }
    

    输出结果:

    l i y o u y o u 
    

    注:String类有一个方法toCharArray(),它返回一个char数组,像上面一样迭代字符串里面的所有字符;

    3.标签

    标签是后面有冒号的标识符:

    public class K控制程序流程{
    	public static void main(String[] args)
    	{
    		int i=0;
    		outer:
    			while(true)
    			{
    				System.out.println("outer while loop");
    				{
    					while(true)
    					{
    						i++;
    						System.out.println("i=:"+i);
    						if(i==1)
    						{
    							System.out.println("continue");
    							continue;
    						}
    						{
    							if(i==3)
    							{
    								System.out.println("contiue outer");
    								continue outer;
    							}
    							if(i==5)
    							{
    								System.out.println("break");
    								break;
    							}
    							if(i==7)
    							{
    								System.out.println("break outer");
    								break outer;
    							}
    						}
    					}
    				}
    			}
    	}
    
    }
    

    输出结果:

    outer while loop
    i=:1
    continue
    i=:2
    i=:3
    contiue outer
    outer while loop//这一句是如何来的?是因为当i==3的时候,后面接的是continue outer;所以带标签的continue会到达标签的位置,并重新进入紧接着在那个标签之后的循环
    i=:4
    i=:5
    break
    outer while loop
    i=:6
    i=:7
    break outer
    
    

    五.初始化与清理

    1.用构造器确保初始化

    关于构造器:是一类特殊类型的方法,没有返回值

    class aa{
    		aa(){//this is the constructor
    			System.out.print("bb"+" ");
    		}
    		
    	}
    public class Y1用构造器确保初始化 {
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		for(int i=0;i<5;i++)
    		{
    			new aa();
    		}
    	}
    
    }
    
    output:
    bb bb bb bb bb 
    

    2.重载构造器与重载方法

    class tree{
    	int len;
    	tree()
    	{
    		System.out.println("shumu");
    		int len=0;
    	}
    	tree(int i){
    		int len=i;
    		System.out.println("now len="+len);
    	}
    	void info()
    	{
    		System.out.println("shumu is="+len);
    	}
    	void info(String a)
    	{
    		System.out.println(a+" len="+len);
    	}
    }
    public class F方法重载 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		for(int i=0;i<3;i++)
    		{
    			tree t=new tree(i);
    			t.info();
    			t.info("method");
    		}
    		new tree();
    	}
    
    }
    
    output:
    now len=0
    shumu is=0
    method len=0
    now len=1
    shumu is=0
    method len=0
    now len=2
    shumu is=0
    method len=0
    shumu
    

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    【leetcode】9 longest common prefix
    4月份需要整理的问题总结
    JavaScript DOM 编程艺术(第2版)---P1~P9
    JavaScript DOM 编程艺术(第2版)---序中故
    18年3月周末问题汇总
    三目运算+传参+封装的运用实例
    git学习参考博客
    jq实现类名(class)的增删改查
    ztree树集使用(2)
    word2010在正常关闭的情况下,点了“不保存”,如何恢复
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/12730748.html
Copyright © 2011-2022 走看看