我们的java基础到底有多差 一个视频引发的感想

以此文来警示自己。

大三要结束了。

我从大一下学期开始接触java,两年半了,期间有很努力的自学,也参与了一下项目,满以为自己的java基础应该不错,但今天在网上看了一个视频才发现自己学的是多么的“浅”,知道了自己的java基础还很差。写程序不是可以实现功能就可以了,还要考虑效率。或许定义一个变量只会多占用几个比特位,一个for循环只会多消耗几毫秒,但当一段段代码组成一个个庞大的系统时,弊端就显露出来了,就像视频里说的,我们写出来的项目只会是一个个12306。

或许是科班出身的我们被教的东西不够吧,有些东西还是得自己努力去探索的,即使是基础知识,也不容小觑,因为基础也不是像你想的你们的简单。

下面奉上看视频做的笔记,经验丰富的高手们肯定都知道,望勿喷。

package test;

import java.math.BigDecimal;

public class TestData {

	/**
	 * 数据类型 :基本数据类型   引用数据类型(自定义)
	 * 基本数据类型:byte short int long float double char boolean
	 *       字节       1     2    4   8    4       8    2
	 *
	 * float :32位(1+8+23)  符号位+幂指位+数值位
	 * double:64位(1+11+52)
	 */

	public static void main(String[] args) {
		//给char型赋值有四种方法
		char c1 = 'a';          //直接赋值
		char c2 = 97;           //ASCII码赋值
		char c3 = '\u4e2d';     //unicode编码赋值   后面是16进制
		char c4 = '\t';         //转义字符
		System.out.println(c1+"&"+c2+"&"+c3+"&"+c4+"&");   //a&a&中&	&

		//int型赋值
		int n1 = 30;                //直接赋值
		int n2 = 0b11110;           //二进制赋值 0b+ ||30=16+8+4+2  ||除2取余 15_0 7_1 3_1 1_1 0_1 -> 11110
		int n3 = 0x1e;              //16进制赋值 0x+ ||转二进制 00011110  转16进制 1E
		int n4 = 036;               //8进制赋值 0+   ||除8取余  3_6 0_3  36
		System.out.println(n1+"|"+n2+"|"+n3+"|"+n4+"|");   //30|30|30|30|
		//char+int+String 先做加法 再拼接
		System.out.println('1'+1+"1");   //501  char型的1表示ASCII码为49  49+1+"1" = 501
		//String+int+char 拼接再拼接
		System.out.println("1"+1+'1');   //111
		//char+char 做加法
		System.out.println('1'+'1');     //98   49+49=98
		//2.0-1.1
		System.out.println(2.0-1.1);        //0.8999999999999999
		System.out.println(2.0f-1.1f);      //0.1
		/**
		 * double: 2.0转为2进制 10.0000000000000000(16位处截断)
		 *         1.1转为2进制 01.0001100110011001  (1二进制为1, 小数:0.1*2=0.2_0 0.2*2=0.4_0 0.4*2=0.8_0 0.8*2=1.6_1 0.6*2=1.2_1 0.2*2=0.4_0)
		 *         相减得0.1110011001100111 转为10进制-0.8999999999999999
		 * float   先按double计算,然后四舍五入为0.9f
		 * 解决方法:使用BigDecimal
		 */

		BigDecimal b1=new BigDecimal("2.0");
		BigDecimal b2 = b1.subtract(new BigDecimal("1.1"));
		System.out.println(b2);            //0.9

	}

}
package test;
//运算符
public class TestOperator {

	public static void main(String[] args) {
     //取模运算符 符号位取决于第一个数
		System.out.println(5%3);       //2
		System.out.println(-5%3);      //-2
		System.out.println(5%-3);      //2
		System.out.println(-5%-3);     //-2
		System.out.println(2%2);       //0
		System.out.println(-2%2);      //0

	 //非短路运算符[& | ]和短路运算符[&& ||]
        int num = 5;
		if(++num < 4 && num++ > 1)
			 System.out.println("qwer");
		System.out.println(num);
		//结果是:6
		//短路运算符前面判断为false 后面的就不再执行了(对与运算来说,对或运算相反)
	    num = 5;
	    if(++num < 4 & num++ > 1)
			 System.out.println("qwer");
		System.out.println(num);
		//结果是7
		//非短路运算符全执行

    //按位运算符
		//当一个正数%2的n次方时,等价于&(该2的n次方-1)
		System.out.println((100&1)==100%2);        //true
		System.out.println((100&3)==100%4);        //true
		System.out.println((100&7)==100%8);        //true
		System.out.println((100&15)==100%16);      //true
		System.out.println((100&31)==100%32);      //true

		//权限的实现 1:权限1   2:权限2   4:权限3   8:权限4
		//以他们的和表示权限  如3=1+2   7=1+2+4   9=1+8
		//用自己的权限&某一权限的代表数字  可得知自己有无该权限
		System.out.println((9&1)==1);       //true   表示有权限1
		System.out.println((9&2)==2);       //false
		System.out.println((9&4)==4);       //false
		System.out.println((9&8)==8);       //true

		// 在不借助第三块空间的条件下 交换两个数
	    //使用按位异或运算符
		int a = 1;
		int b = 2;
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		System.out.println(a+" "+b);          //2 1
	     //加减法
		 a = 1;
		 b = 2;
		 a = a + b;
		 b = a - b;
		 a = a - b;
		 System.out.println(a+" "+b);        //2 1

		//不局限的利用for循环
        //打印a-z
		 for(int i = 97;i<123;i++){
			 System.out.print((char)i);
		 }
		 //这样真的好吗? 看看下面的:
		 System.out.println();
		 for(char c='a';c<='z';c++){
			 System.out.print(c);
		 }
		 //第二种只利用char的16个位  第一种还需要利用int的32个位

	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 11:05:06

我们的java基础到底有多差 一个视频引发的感想的相关文章

【Java基础】用LinkedList实现一个简单栈的功能

栈的基本功能 栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法. 构造存储对象Student /** * Created by lili on 15/11/14. */ public class Student { private String name; private int age; public Student() { } public Student(String name, int a

JAVA基础学习--Eclipse中导入一个java文件

在编写java工程时,可能会用到别的已经成熟的java类文件,那么如何才能将目标类文件导入到工程中呢, 以下Operation.java为例. 现一个java文件源码. 1.打开eclipse,“File”->"New"->"Java Project",在Project Name中输入工程名,如:com.linwu.其他参数使用默认数据.点击Finish 2.在工程com.linwu下的Src,点击右键,选择New->Package,在name这一

java基础—继承题目:编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish

编写一个Animal类,具有属性:种类:具有功能:吃.睡.定义其子类Fish package zhongqiuzuoye; public class Animal { //属性 private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } //功能 public void eat() { } public void sleep

经典面试题回答——学习Java基础的目的

本系列知识解释:相信每一个学习Java的人都是从JavaSE开始的,也就是Java基础开始.但是却并不清楚学习Java基础到底有什么用? 首先我来回答这个问题,学习Java基础是有两个目的: 一.掌握基本的Java语言底层编码方法,同时掌握Java这门语言的编程思想,为了后期学习JavaEE打下基础,要不然在学习JavaEE的时候,连封装,继承,多态都不懂,那就实在是没法说了(相信在传智播客学习过Java基础的同学,这些都不是问题.) 二.在学习完JavaSE和JavaEE后招工作的时候能够答上

Java基础知识:Java知识简介

一.java基础语法: 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等: 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法.逻辑运算.数据修改以及所有动作都是在方法中完成的. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定. 编写J

Java基础知识框架概括

所有的学习是一个过程----学习规则,应用规则,创新.打破规则的过程.在遇见新事物的时候,对他进行整体的认知,了解前行路途的大致规划,这是一种着眼全局的模式,也是开启记忆的一个方式.在之后的学习中,逐步填充好每个小章节,也同样用此类方式,对每个章节进行核心关键词的提炼,形成当前这棵树的枝桠,逐渐扩展成一棵枝繁叶茂的“大树”.也正是有这棵树的存在,所有的一切,关于Java基础,都是从一个点开始的. 在我看来,学习Java基础,也就是学会用Java这支“笔”,学会Java的特性,为以后写下“文章”奠

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

java基础问题总结

1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并

常见Java基础知识(较长)

1.抽象:  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量