Java程序设计基础首页投稿(暂停使用,暂停投稿)

极客-java

2016-09-14  本文已影响101人  暗黑破坏球嘿哈

刷题急用,补一下java基础,只看需要的部分(老王说用go刷题不好,不利于个人身心健康和前途发展┑( ̄Д  ̄)┍)

第一章开发环境没看
只看二三四章:语言基础,面向对象,语言进阶

第二章java语言基础

1.数制和数据类型

1.进制

  1. 十进制,10叫基数,10^n叫权
  2. 二进制,


    Paste_Image.png
  3. 十六进制,ABCDEF
    (进制转换不看了,,基础课都有)

2.变量和数据类型

  1. boolean 在数组中占1字节,单独用4字节
  2. byte--1, short--2, int--4, long--8, float--4, double--8, char--1(float默认double,如果想用单精度folat,要在字面量后面加上f。eg:float height=1.99f;
  3. 栈效率高,仅次于寄存器,先进后出,存储空间较小,jvm将基本类型数据都放在占空间
  4. 堆效率低,存储数据为止随机分配,存储空间较大,可以放字符串,数组和集合(这些都算大数据)
  5. 字面量:变量和常量中存放的具体数据
  6. 变量名和数据的地址对应(使用变量的原因,值传递)
  7. 引用类型:


    引用传递
  8. 命名:字母,_ $ ;变量名小写,见名知意,首字母小写,驼峰
  9. 定义变量:类/类型名 变量名
    float x,y;可以一次定义两个
  10. 初始化 ‘=’,定义的时候可以直接初始化
    int a=1;

3.控制台输入

4.变量使用

  1. math.round 四舍五入,math.pow(16,2)= 16^2
  2. 变量保存多种数据类型

6. 变量作用域

  1. 大括号里只有一个可以用的,换句话说,大括号可以用来区分作用域,大括号内的变量在大括号结束时都被回收
  2. 下图会报错,因为第一个name还没回收


    变量名重复

7.包装类 类型名大写


eg:

  1. Byte.MIN_VALUE 存储了byte类型的最小值,可以类型间转换,定义数组等的类型;
  2. Integer.parseInt; Byte.parseByte("108")把字符串parse成byte
  3. Integer.toBinaryString(16) 把十进制转成二进制

8. 二进制补码

  1. 计算机计算二进制,用二进制的补码来存储,最高位是符号位。
  2. 正数是本身,负数是最高位(最高位-符号位==1)不变,其他位逐位取反再加一
  3. 计算机中正数和负数的关系是取反加一(3=0011,-3=1100+1=1101)
  4. 补码运算封闭
  5. 负数=模-正数
    模=正数+负数

9. 整数类型

  1. java有四种整数类型,byte,short,int,long
  2. 默认int
  3. 字面量的值默认都是int,如果用字面量方式给short或者long赋值,需要加后缀(eg:long longValur=2200000000l
  4. 一个例子


    类型dismatch

    如果b2=124+3 不报错,因为编译过程就直接计算出了124+=127,如果是125,超出计算范围,还是报错
    我猜,图里报错原因,5是byte型,3是int,b1+3被转成int

10.浮点类型

  1. float, double
  2. 默认double
  3. 赋值时候如果字面量是float类型,需加上f
  4. 浮点运算就是实数运算
  5. 整型运算比浮点运算精度高速度快,尽量用

11.字符类型

  1. java底层用一个16位整数来表示字符,占2字节,叫unicode编码
  2. unicode和ASC2码兼容
  3. 强转:(char)0 显示数字0对应的字符

12.转义符

  1. “\”
    \n 回车
    \

13.boolean

boolean isPass=true;
isPass=59>=60;

14.小类型向大类型转换

  1. java默认整数运算是int运算,上面那个我猜,就是因为这个,计算结果被当成int
  2. 小类型向大类型转换==隐式类型转换,由jvm自动完成
  3. byte->short->int->long->float->double
  4. int/char某些情况下会自动完成转换
  5. 整数到浮点数可能会精度丢失

16.大类型向小类型转换

  1. 强转==显式类型转换
  2. 注意边界值

17.char-->int

char c='A';
int i=c+1;
c=(char)(c+1);

18.args数组从控制台输入数据

run 的时候用run configure 有一栏是参数,输入参数

19&20. scanner扫描控制台输入的数据

  1. String next(); 接收控制台输入的一个字符串,不接收空格
  2. 接收空格
  3. next Double(); 接收一个double
  4. String.charAt()从字符串中获取指定下标的字符eg: "abc".charAt(0)=a
  5. 具体步骤
Scanner scanner = new Scanner(System.in);
//type name= new type(), 创建对象
String name = scanner.next().charAt(0);
System.out...
//

21.自增等运算

以加法为例,其他和加法一样
++i
//先加1
i++
//后加1
i+=n
//i=i+n

22.交换连个变量的值

a=1
b=2
//交换ab,第一种方法是加一个中间变量tmp
//第二种方法如下(不需要加第三个变量)
a=a+b
b=a-b
a=a-b

23.错误类型

逻辑错误
语法错误

2-6.(关系运算,逻辑运算,if else 和switch,在code cademy上看过了,笔记

  1. !
    is evaluated first
    &&
    is evaluated second
    ||
    is evaluated third
System.out.println( !(false) || true && false);
//output:true
  1. 三目(ternary conditional
  2. switch match后需要break来跳出(go不需要)

7.循环

  1. while
  2. do while
char c='a';
do{
  System.out.println(c+":"+(int)c);
  c++;
//字符变量可以做++运算
}while(c<='z');
  1. for
    循环流程,跟c一样,每个分号部分都可以有多个短句

8.数组

type arrayName[];
type[] arrayName;
arrayName.length
int score[]={33,67,45,98,12};

/*声明数组方式: 
 * 为数组分配内存空间:new,也叫实例化
 * 在heap中开辟【下标】一定数量空间,for循环,动态初始化,声明时赋值,静态初始化
 * 静态初始化:int score[]={2,3,4,5,5} 
*/
int arrayDemo[] = new int[3];
//int[] Score;第二种声明方法
//arrayDemo =new int[3];

for(int i=0;i< arrayDemo.length;i++){ 
  arrayDemo[i]=i+1;   //name.length表示数组长度
}
for(int i=0;i<3;i++){   
  System.out.println(arrayDemo[i]);
}

mark一个知识点:super & this

9. string

String str="xiaolukeai";

  1. 字符串长度:str.length()
  2. 转换数组:str.toCharArray
  3. 取出指定位置字符:str.charAt()
  4. 转换byte:byte bytes[]=str.getByres();
    System.out.println(new String(bytes)+"\t");
  5. 检查是否有某字符:str.indexOf("@")返回该字符当前位置
  6. 去掉空格:str.trim()
  7. 取出子字符串:str.substring(3)向后取
  8. stringBuilder是stringBuffer的一个简易替换,在字符串缓冲区被单个线程使用的时候有限考虑该类,append和insert方法都跟buffer那个一样

10.object

  1. 构造方法:方法名和类名一样,没有返回值,不调用但会在一开始被执行
  2. 只允许单继承,�一个儿子只有一个亲生父亲,但可以多层继承
  3. 子类不能直接访问父类的私有属性,可以通过set和get方法
  4. 一个接口可以继承多个接口
  5. 方法在类里面,void不需要返回值
  6. string类型不可改变(通过调用方法,方法里写改变string值,这样是不能实现的),所以用建立类,通过改变类属性来改变string,或者直接str="newValue";
  7. static:
    //static声明全局属性
    //static声明方法直接通过类名调用
    //静态方法不能调用非静态方法和属性的
  8. this:谁调用我,我指的就是谁
    //1、类中的属性和调用方法(当前调用的本类的)
    //2、调用无参数构造方法,要放在第一句
  9. super:谁调用我,我指的是谁的爸爸
    (unmark)
  10. generic代表多个类,解决数据类型的安全问题


    初始化和实例化

    有一些用法写了demo,后来ide卡了,简单记在下面

  1. 直接用泛型,方便接收各种类型的参数
  1. 通过泛型在构造方法里给类设置属性
  2. 多个泛型<String, Integer>
  3. 通配符,什么类型都可以指定, student<?>这么用,(class student<T>{})
  4. 泛型接口,interface interfaceName<T>{}(接口不太会用到,先不看),接口里的方法可以重写,接口要靠他的子类来实现
  5. 泛型方法,可以定义泛型参数,参数类型就是传入数据类型,写法:方法名称前加泛型标识
//泛型接口
interface GenInter<T>{
}

//第一种
class Gen implements GenInter<String>{
private String info;
get()
set()
}
//main函数中实例化一个实例
Gen g = new Gen("keai");
g.getInfo()

//第二种
class Gen<T> implements GenInter<T>{
}
//main函数中实例化一个实例
Gen<String> g = new Gen<String>("keai");
g.getInfo()
//泛型方法<T>T是泛型标识,后面的T是返回值类型
class className{
  public <T>T tell(T t){
  return t
}
}

className g = new ClassName;
String str = g.tell("keai");
int i = g.tell(7);
//泛型数组
String arr[] = {"a","b"};
tell(arr);

public static <T>void tell( T arr[]){
//forloop不写了
for{print(arr[i])}
}

11. collection集合类详解

1. 概述

  1. collection接口
  2. List
  3. Set
    //2,3 都是1 collection的子接口
  4. Iterator
  5. Map和collection是同一级别的

2. collection (java.util)

  1. 是一个接口
  2. 动态数组对象,可以任意扩充
  3. 性能高
  4. 易扩展和修改
  5. 子类有list、set、queue

3. list 存放任意数据,

  1. list接口中的内容可重复
  2. 常用子接口:ArrayList,Vector
  3. ArrayList和Vector的一些方法:
    1). 判断集合是不是空 isempty()
    2). 指定index是否存在 indexOf()
    3). 获得list长度size()
List<String> lists = null;
lists = new ArrayList<String>();
lists.add("A")
  1. ArrayList,Vector区别:ArrayList性能高,非线程安全;Vector性能低,线程安全

4. Set 接口

  1. 内容不可重复
  2. 可排序
  3. 常用子接口:HashSet(散列),TreeSet(可排序)
Set<String> s = null;
s = new HashSet<String>();
s.add("A");
//可以多add一些,这样add的内容如果输出可以看到会乱序排列,如果改成TreeSet是有序

5. Iterator 接口

  1. 集合输出的标准做法是用iterator输出
  2. iterator是专门的迭代输出,有内容,就输出
  3. 方法:hasNext, next, remove
List<String> lists = null;
lists = New ArrayList<String>();
lists.add("A")
lists.add("B")
lists.add("C")
//用iterator输出
Iterator<String> iter = lists.iterator();
while(iter.hasNext()){
//这里不能remove
  System.out.println(iter.next());
}

6.map 接口

  1. 保存形式:key-value
  2. 常用子类:HashMap, Hashtable,都是无序存放,key不能重复
  3. 声明的时候
    Map<String, String> m = new HashMap<String, String>();
  4. map赋值:m.put("key","value");
  5. 判断key是否存在(刷题常用)
if (map.containsKey("key1")){
}
//值也可以判断
map.containsValue("value")
  1. 得到全部的键值:
//map.keySet()返回一个key的set集合
Set<String> s = map.keySet();
Iterator<String> i = s.iterator();
//while loop 输出,得到所有的key但是顺序是乱的
//——————————
//map.values();返回一个value的collection集合
Collection<String> c = m.value();
Iterator<String> i = s.iterator();
//while loop 输出,得到所有的key但是顺序是乱的

一个补充:ArrayList和LinkedList的区别

  1. ArrayList实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
  4. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
  5. 当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

两个补充(在《java核心技术》看到的关于java的简介)

  1. 在网页中运行的java程序叫applet
  2. java以前叫oak
  3. JDK--java development kit--写java的程序猿使用的软件
    JRE--java runtime environment--运行java的用户使用的软件
    SE--standard edition--用于桌面,简单
    EE--enterprise edition--用于复杂的服务器应用的java平台
    ME--Micro Edition--手机等小型设备的java平台
  4. javac程序是一个java编译器,把name.java 编译成name.class 发送到java虚拟机(jvm),虚拟机执行编译器放在class中的字节码
  5. 如果有 bad command of file name /javac:command not found这种报错,要看一下是不是安装出错,尤其是执行路径的设置
  6. 如果错误信息太多,可以 javac myProg.java 2>errors.txt把错误信息都写入txt文件中查阅

三个补充,之前看java的时候记得一点东西

java

java的类
一个类可以包含以下类型变量:

  1. 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  2. 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  3. 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

源文件声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

  1. 一个源文件中只能有一个public类,可以有多个非public类
  2. 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
  3. 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
  4. 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
  5. import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。这些将在访问控制章节介绍。
除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。

----**---
最近又有swing的需求,来补课
(首先,java有多套GUI工具包的原因是,没有一个可以满足所有要求的GUI工具包)

12.swing

  1. Swing 在AWT组件基础上构建的,使用了AWT的时间模型和支持类,比如Color, images, graphics
  2. 方便移植
  3. 基于MVC
  4. 选择Swing: 最灵活最强大,GUI首选
  5. 不适合使用Swing的时候: 在SWT基础上继续开发不适合,因为两者不兼容,SWT会用来开发Eclipse插件
  6. java.swing.Jcomponent往上都是继承自awt的
  7. 窗体本身,Jframe,点击控件,继承自awt.window
  8. Jcomponent,Jfram,Jwindow,Jdialog是swing的顶级类,以J开头的不是控件就是窗体,以model结尾的,都是控件的模型,体现了MVC结构,,,where
  9. Swing的MVC结构,model(存数据) view(视图) control(功能)
    --内容都比较简单,适合直接上手做
上一篇 下一篇

猜你喜欢

热点阅读