java基础知识起步

第一章

将java文件编译成class文件:

在记事本中编辑java代码-----修改文件名为.java文件----打开cmd---进入文件所在文件路径如f:----在命令窗口执行

javac 文件名.java--执行命令:java 文件名

包名小写,类名首字母大写,类名可.java文件名要完全一致,是\n注意不是/

用javac 文件.java命令编译,后用java  类名 执行形成的Class文件

第二章

标识符的命名规则:(驼峰命名法)变量名,方法名第一个单词小写后面每一个单词首字母大写

三种注释:单行,多行《按住Shift鼠标点击开始结束部分,Ctrl+Shift+/》,文本注释

扫描类库:Scnner input=new Scanner(system.in);

取得输入的内容: answer= input.next();

Boolean flag= Input.hasNextInt();判断输入的值是不是整数,是就返回true,否则false

知道8种基本数据类型(byte,short,int ,long,float,double,char(a=97,A=65),boolean)存在栈中

引用数据类型:数组,类,接口(存在堆中)

Byteàshortàintàlong àfloatàdouble

char

Char可以自动转换为int类型 存储位数越多,类型的级别就越高

/*int age1=19;

char sex=‘女‘;

int result=age1+sex;          //注意int和char类型相加自动转为高级的int类型,结果为int类型

System.out.println(result);*/

关系运算符的关系表达式结果为 布尔值

逻辑运算符与&,|,!

优先级:! > & > ^ > | > && >||(短路&&如果前面一个不成立后面的不参加运算)

Null值不能用equals方法判断等值;

三元表达式: 条件?表达式1 :表达式2(条件为真执行表达式1,条件为假执行表达2)

Short s=1 ,s2=4; short s5=s+s2;两个short类型变量可以相加)(s=s+8;这时候报错)

String .equals比较的是值(不能为null),==比较字符串的地址

第三章

1.Switch:(转换)

Switch(int mingci){          //快捷键 Alt+/+回车

Case 1 :System.out.print(“参加麻省理工一个月的夏令营”) break;

Case 2 :system.out.print(“送笔记本”)    break;          //跳出所在的循环

Continue    //继续下一次循环

Default :   只有所有的case没有匹配上才执行default内容

}

Switch中的判断,jdk1.7一下不能为字符串,可以是int,enum,char(可自动转换为int)

While(条件){循环体} 当条件成立时执行,直道条件为false

注意:do...while();  结束后面有分号

For(int i=0;i<10;i++){循环体;}

程序调试问题:

1.双击添加断点--à 2.按住小虫子或F12启动调试---à3.F6单步调试(F5单步跳入,跳入程序内部执行,如进入方法内部)

  1. java中的增强foreach循环(for score:scores){system.out.print(score);}

for(int I : scores){system.out.print(i)}

for循环和foreach循环的区别:

  1. for循环需要知道循环的次数,foreach不需要知道循环的次数
  2. foreach用来遍历数组和集合使用更简单
  3. foreach循环语法格式更简单,无需下标,没有赋值语句,没有循环条件,没有迭代语句,这些操作有系统来操作
  4. foeach循环不要尝试去改变数组元素的值,因为数组元素赋给了一个临时变量

2.Return 语句的作用:

  1. 结束当前方法的执行并退出
  2. 返回调用该方法的语句出

第四章

1.数组在内存中是连续开辟空间的(数组中存放的元素可以是基本数据类型也可以是引用基本数据类型,必须是同一数据类型)

(1)  int scores[]={1,2,3,4}; 或 int[] scores={1,2,3,4};

Int[] a={3,5}     定义数组时不指定长度,

(2)  Int[] a=new int[]{1,2,3};   初始化数组时,不指定长度

(3)  Int[] a; a=new int[5]; a[1]={2};

数组是一个变量,存储相同数据类型的一组数据

数组的下标从0开始;

数组的编译错误和运行时异常;

2.二维数组的使用

二维数组的定义和初始化:

Int[][] scores=new int[5][5];

Int[][] scores={};

Int[][] scores=new int[][]{{1,2}  ,{1,3},{3,4,4} };

Arrays类极其常用的方法:.equals(array1,array2);比较两个数组是否相等

.sort(array);数组的升序排列

.toString();array 将数组的Array转换成一个字符串

.fill(array,val);把 数组array的所有元素都赋值为val;

.copyOf(array,length);将数组array复制成一个长度为length的新数组

.binarySearch(array,val) 查询元素val在数组array中的下标

3.数组中的数据类型是必须“统一”自动转换为同一种数据类型

Int[] array={2,4,’a’}

第六章

1.面向对象

类和对象的关系:就是抽象和具体的关系

类名必须大写

成员变量有默认初始值;

OOA 面向对象分析    OOD面向对象分析

2.面向对象的优点:

1.与人类的思维习惯一致,

2.信息隐藏,提高的程序的可维护性和安全性

3.提高了程序的可重用性

类成员主要包括两部分:成员变量和成员方法

3.方法重载的优点:可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,只要记住一个方法名即可

重载条件:方法名相同,参数列表不同(参数个数和参数类型不同,

参数的类型和个数相同,顺序不同)

4.成员变量和局部变量的区别:

  1. 作用域不同
  2. 初始值不同(对于成员变量如果在类定义中没有给它赋初值,Java会给她一个默认值,基本数据类型为0,引用数据类型为null,但是Java不会给局部变量赋值必须在定以后赋初值)
  3. 在同一个方法中,不允许有同名的局部变量
  4. 局部变量可以和成员变量同名,在使用中局部变量有更高的优先级

5.构造方法:如果自定义了一个或多个构造方法,那么java不会自动添加默认构造方法

1.构造方法必须和类名相同

2.没有任何的返回值类型

3.用来创建对象,初始化数据

6.This关键字的用法:

  1. 使用this调用成员变量,解决成员变量和局部变量的同名冲突

Person(int age){this.age=age}

  1. 使用this调用成员方法 this.work();
  2. 使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法第一条语句

Public penguin(String name,String sex){this.name=name;this.sex=sex;}

Public penguin(String name,int health,int love,String sex)

{this(name,sex); this.health=health;this.love=love;}

This只能调用成员属性,实例方法,构造方法,不能调用类变量和类方法,也不能调用局部变量

this能不能调用类方法和类变量

this可以调用类变量,但是类方法需要通过 类名.类方法 的形式调用。this是一个指向当前对象的指针,而对象是类的一个实例,所以this指向的是某个类的一个当前实例,而不是类本身

7.封装的作用:

  1. 避免外部操作引起的影响
  2. 提高松耦合和代码重用性

封装的概念:将属性私有化,提供公共方法来访问私有属性。

8.包的作用:

1.java 文件的组织形式

2.管理java文件

3.解决文件同名问题

4.也是一种访问控制机制

Java.lang包下面的所用工具不需要导入,可以直接引用

9.访问修饰符


修饰符


同一类中


同一包中


子类中


任何地方


Private


Yes


No


No


No


无访问修饰符


Yes


Yes


No


No


Protected


Yes


Yes


Yes


No


Public


Yes


Yes


Yes


Yes

10.在类中声明成员变量:

成员变量可以是Class类型的成员变量

Public class Student{

Private Person person;  //类中定义引用数据类型的成员变量

}

第七章

1.继承:使得一个类A能够直接使用另一个类B的属性和方法的途径

类A可以有自己的属性和方法

2.继承的语法:

修饰符 class 子类 extends 父类{  //类定义部分}

子类继承父类的什么:

  1. 继承public 和protected修饰的属性和方法,不管子类和父类是否在同一个包里。
  2. 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里

子类不能继承:

  1. 无法继承private修饰的属性和方法
  2. 无法继承父类的构造方法
  3. 子类与父类不在同包使用默认访问修饰符修饰的(friendly)

如果从父类继承的方法不能满足子类的需求,在子类中可以对父类的同名方法进行重写。

  1. 方法的重写或方法的覆盖(  overriding )

子类中根据需求对父类继承的方法进行重新编写

  1. 构成方法的重写的条件:

1.必须具有相同的方法名

2.必须具有相同的参数列表

3.返回值类型必须相同或者是其子类

4.不能缩小被重写方法的访问权限

重载(overloading)和重写(overriding)有什么区别:

重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关

重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同或者是其子类

5.super关键字的使用:

Super代表当前对象的直接父类对象的默认引用

Super必须是出现在子类(子类的一般方法[super.方法名]和构造方法中)而不是其他位置。

Super 和 this 不能同时出现在一个构造方法中

Super指代父类:

  1. 调用父类成员:成员变量,成员方法,通过super.XXX

2.调用父类构造方法,通过super(),必须出现在构造方法的第一句话

用于访问父类的成员,例如父类的属性,方法,构造方法

访问权限的限制,例如无法通过super访问private成员。

  1. 继承条件下的构造方法的调用规则:

    1. 规则一:如果子类的构造方法中没有通过super显示调用父类有参的构造方法,也没有通过this显示调用自身其他构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下,是否写 “ super(); “ 语句效果是一样的
    2. 规则二:如果子类的构造方法中通过super显示调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法
    3. 规则三:如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应的构造方法中应用以上两条规则。
    4. 在继承条件下,代码的执行,先执行父类无参构造方法后调回子类,在一个类中,先加载父类属性,然后加载父类构造方法,然后子类属性,最后子类构造方法

构造方法不能循环嵌套调用

  1. Object的equals()方法

相等的属性值:两个对象具有相同的类型,相同的属性

同一个引用对象:两个引用指向同一个对象,即指向同一个地址

注意:如果单纯的使用object类的equals()方法来比较对象是否同一个引用对象,那么是跟操作符“==”没有区别

  1. 一个类构造方法在如下两种情况中总会执行:

    1. 创建该类的对象(实例化)
    2. 创建该类的子类的对象(子类的实例化)

访问修饰符

8.类图:—sex:String

  1. 多态

多态一词通常含义是指能够呈现出多种不同的形式或形态。他意味着一个特定类型的变量可以引用不同类型的对象,并且能自动地调用引用的对象的方法。

方法的重写是实现多态的基础。

10.子类转换为父类时的规则:

  1. 将一个父类的引用指向一个子类对象,称为向上转换,自动进行类型转换
  2. 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
  3. 此时通过父类引用变量无法调用子类特有的方法

11.向下转型的要求对接口和抽象(普通)父类同样使用

12.Instanceof  实现(boolean flag=pet instanceof Dog)

使用instanceof时,对象的类型必须和instanceof后面的参数所指定大类在继承上下级关系,否则会出现编译错误

13.多态的优势:

  1. 可替换性:多态对已存在的代码具有可替换行
  2. 可扩充性:多态对代码具有可扩充性,增加新的子类不影响已存在的类的多态性,继承性,以及其他特性的运行和操作,实际上新加子类更容易获得多态功能。
  3. 接口性:多态是父类向子类提供一个共同接口,由子类来完善或者覆盖来实现。
  4. 灵活性:多态在应用中体现了灵活多样的操纵,提高了使用效率
  5. 简化性:多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

14.final 修饰类、修饰方法、修饰属性

修饰类,不能再被继承

修饰方法,不能被子类重写

修饰的变量将变成常量,只能在初始化时 赋值 (单词每个字母大写)

15.static 的使用

修饰属性:调用用 类名 . 属性名

Static方法中不能使用非static属性;

修饰的静态代码块:

1.静态代码库比构造方法先执行,执行顺序是先加载父类中的静态代码块-后加载子类中的静态代码块,然后执行父类构造方法后执行子类中的构造方法

2.在类中的静态代码块无论创建多少个对象,只第一次创建时运行static代码快

3.当主函数中调用类中的静态方法也会先执行类中的静态代码库

4.在创建对象时候,会执行静态代码库

16.多态的使用:

1.父类指向子类对象

2.作为方法的形参

3.作为方法的返回值

18.return 返回多种不同类型的变量,多种不确定类型的可变参数的使用

1.可以定义返回一个Object[] 类型的参数

2.可以定义一个类,类中的属性定义为不同类型的属性,将不同类型的赋值给属性

public class Master {

public void feed(Pet pet){

if (pet instanceof Dog) {

System.out.println("*********8");

}

}

public void methad(int[] a){

}

public void methad1(int...is){

}

public void methad2(String s,int...is){

}

public void methad3(Object...objects){

}

public void methad4(Object[] a){

}

public Pet getPet(int money){

Pet pet=null;

if (money>10) {

pet=new Dog();

}else if (money>5) {

pet=new Penguin();

}

return pet;

}

第8章

1.抽象类

  1. 抽象类不能被实例化
  2. Abstract修饰符不能和final修饰符一起使用。
  3. Abstract修饰的抽象方法没有方法体
  4. Private关键字不能修饰抽象方法
  5. Abstract关键字必须在访问修饰符和返回值类型之间
  6. 一个类继承一个抽象类必须重写继承的所有抽象方法,除非它也是个抽象类

2.抽象类和接口

1. 区别:普通方法必须有方法体,抽象方法不能有方法体,抽象方法要有abstract修饰。

2.抽象 类不能创建对象,普通类可以创建对象

3.抽象类是一个不能被实例化的类,它可以具有抽象方法或普通方法

4.抽象类便于复用,接口便于代码维护

5.Public abstract class Person(){   抽象方法,或者  普通方法}

3.接口:是一个不能实例化,且只能有抽象方法的类型

1.使用interface关键字接口中只能有抽象方法

2.Public interface Person(){  抽象方法  }

3.接口中定义的变量默认是公共的 (public) 静态的 (static) 最终 ( final)  的常量(必须赋初始值)

4.接口中定义的方法默认是公有 (public ) 的抽象 (abstract) 方法

5.接口中方法必须有返回值类型

6.接口static 不能修饰接口中的方法

7.接口中不能用final 修饰方法

8.接口中不能有构造方法

9.接口可以继承多个接口,但是接口不能继承类

接口是针对行为而言的

多用组合少用继承

针对接口编程,不依赖具体实现

针对扩展开放,针对改变关闭

4.为什么接口中的方法不用abstract修饰呢,因为接口中只能有抽象方法不必用abstract修饰

规则:

  1. 抽象类与接口不能实例化
  2. 抽象类与接口分别被继承与实现的场合,其子类必须实现其中的抽象方法
  3. 抽象类中的抽象方法的访问修饰符不能为private,抽象类中的普通方法的访问修饰符可以为private,接口中的抽象方法的访问修饰符必须为public

5.implement 实现接口

1.实现接口必须实现接口里面的所有抽象方法

2.一个类同时继承一个父类,extends 在前,implements在后中间通过逗号,分开必须实现里面的所有方法

3.接口中的继承,用extends关键字,接口可以继承多个接口,被继承的多个接口间用逗号分开

6. 一个子类继承一个父类和实现多个接口时:

1. 调用父类中的字段和方法使用super.XXX

2调用接口中的字段和方法用:在子类中定义一个接口类型的成员变量,用接口类型的变量去点接口中的字段和方法

7.匿名内部类:

匿名内部类是指,父类是一个抽象类,在Test内的main方法中创建父类类型的对象,并在重写父类中所有抽象方法,

在父类中的写法  Cook cook=new Cook(){  在这里重写父类中的抽象方法,也可以添加自己的方法,见BOOK1selfStudy-oop-Test3}  ;  后面有分号

8.内部类见   BOOK1selfStudy-oop-Test2}

在内部类中调用外部类的属性用 外部类名Kitchen.this.XXXX的方法

抽象类中可以有构造方法,

第9章

1.异常的分类:

Object 为异常的根类,其次是Throwable为异常类的父类,分为

  1. Error是java虚拟机异常
  2. Exception异常类,异常类分为SQLExcepton和RunTimeException等

2.常见的异常:

1.ArithmeticException 计算异常

2.ArrayIndexOutOfBoundsException 数组越界异常

3.NullPointException 空指针异常

4.ClassNotFoundException没有找到相应的类文件(可能没有导入相应的jar包)

5.NumberFormatException 数据格式化异常(将不是数字转为数字格式的异常)

6.inputMismatchException 数组数据不匹配异常(用户输入的类型和数据中类型不匹配)

7.IllegalArgumentException 方法接收到非法参数

8.ClassCastException  对象强制类型转换出错

3.try {}catch(){  要捕获的异常要和要发生的异常要 匹配}

4.try {} --catch (){}--finally{} 语句结构

1.如果try或catch 中有return语句,那么程序会先执行finally语句中的代码,执行完成或才执行return语句,如果finally中有ruturn语句就不会执行try {  }catch{ }语句中的return了

2.在try—catch—finally语句结构中,try语句块是必须存在的,catch和finally语句块是可选的,但两者至少出现其中之一。

5.终止程序的退出使用,system.exit(0);正常退出

System.exit(-1);非零数字是非正常退出

6.java中异常处理是通过5个关键字来实现

try

catch  捕获异常

finally  无论是否发生异常,finally语句块中的代码总是执行,除非一种情况就是在异常处理代码快中执行System.exit(1)退出java虚拟机

throw

throws

Throws 声明方法可能要抛出的各种异常,

throw 手动抛出异常

e.printStackTrace();//打印堆栈异常信息

7.throw和throws的区别:

1.作用不同:throw用于程序员自行产生并抛出异常,throws用与声明该方法内抛出了异常

2.使用的位置不同,throw位于方法体内部,可以作为单独语句使用;thorws必须跟在方法参数列表的后面,不能单独使用。

3.内容不同,throw抛出一个异常对象,且只能是一个;throws后面跟一个异常类型,且可以跟多个异常类。

8.自定义异常:  throw new 自定义异常类名(“异常原因”);

时间: 2024-10-25 01:39:33

java基础知识起步的相关文章

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

Java基础知识——类装载器与反射机制

类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件. 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件: 2.链接:执行校验.准备和解析(解析是可以选择的): 3.初始化:对类的静态变量.静态代码块执行初始化工作: 类装载工作由ClassLoader及其子类负责.JVM在运行时会产生三个ClassLoader:根装载器.ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器). 根装

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int