1,有些程序软件是图形界面型的,在windows系统中打开执行。还有命令行式的软件,要用命令窗口打开执行!
2,Java中,数值型不同类可以相加减,会强制类型转换。但是不是数值型的和数值型无法运算。
3,Java是完全面向对象的语言,它不再支持c++程序所使用的过程式的设计方法,所有函数和变量必须是类的一部分。除了基本数据类型(整型,字符型,布尔型)之外,其他的数据对java来说都是对象,包括数组。
对象将数据和方法结合起来,把他们封装在类中,这样每个类都可以实现自己的特征和行为。java不存在全局函数或者全局数据,如果想获得和全局函数等价的功能,可考虑将static方法和static数据置入一个类中。
Java中取消了c和c++中的结构和联合,枚举这一类东西,一切都只有类(class),消除了不必要的麻烦。
Java的语法其实式参照c++的语法诞生的,但是它去除了c++中的多重继承,指针,delete等难以掌握的技术,为了便于移植和安全性,Java采用了纯面向对象技术,即使是主函数public static void main(String[] args){} 也要放在主类中,可以看出和c++的明显区别。
在java中,类定义采取几乎和c++同样的形式。但没有标志结束的分号。没有类声明,只有类定义。
4,Java中没有内置的字符串类型,而是在标准Java类库中提供了一个预定一类,很自然的叫做String。每个用双引号括起来的字符串都是String类的一个实例。
5,String字符串不能用“==”来判断相等,“==”可以用在判断两个字符串是否在同一个位置上,判断两个String对象是否相等要用String.equals(other)。其他类可以用“==”判断相等。
6,String不能拷贝,必须一个一个赋值(除了初始化时)。但是数组可以拷贝,int[] a=b,此时a,b指向同一个数组,更改一个另一个也改变。要想拷贝到一个新的数组中,就要用copyOf()方法。而且可以增加或减少新数组的长度。
7,在java中,所有的方法都必须在类的内部定义,c++通常定义在类的外面。
8,Java用于控制可见性的四个访问修饰符:
1)private—>仅对本类可见。
2)public—>对所有类可见。
3)protected—>对本包和所有子类可见。
4)默认,没有修饰符—>对本包可见。
9,Java类型包装器,是在基本类型的基础上,对于基本类型进行对象化,使其能够相互转换,扩展如下:
1.基本数据类型之间的相互转换不是都可以制动转换的,而你强制转换又会出问题,比如String类型的转换为int类型的,那么jdk为了方便用户就提供了相应的包装类。
例子:
public class Integer
{
private int i;
public Integer(int a)
{i =a;}
public static int parseToInt()
{return i;}
public static Integer valueOf(String str)
{//封装一系列的逻辑最终将str转换成int类型的IntegerStr
return new Integer(IntegerStr);
}
}
2.有时候一个函数需要传递一个Object的变量,而想传递int类型的进去显然不行需要用到了包装类传递object类型。
public void test(Object obj){}
test(new Integer(5));
综上所述,包装类有三个用法 一个实现基本类型之间的转换 二是便于函数传值 三就是在一些地方要用到Object的时候方便将基本数据类型装换
10,int与integer的基本使用对比:
int 是基本类型,直接存数值,进行初始化时int类的变量初始为0。
integer是对象,用一个引用指向这个对象,Integer的变量则初始化为null。
ArrayList al=new ArrayList();
int n=40;
Integer nI=new Integer(n);
al.add(n);//不可以
al.add(nI);//可以
11,当用new创建一个类的实例时,其实创建了两个对象,一个是类的对象,一个是对象的引用变量,引用变量实际上也是一个对象,它存储着对象的存储地址。
12,java不支持多继承,因为超类中可能有重复的方法,导致子类在调用的时候发生问题。
java在接口中有多实现,可以作为多继承的替换,因为接口类中的抽象方法没有函数主体,都在子类(实现类)中定义,所以没有继承的问题。C++支持多继承,随之带来了一些诸如虚基类,控制规则和横向指针类型转换等复杂特性。导致语言本身变得非常复杂,效率也会降低,事实上,很少有c++程序员使用多继承。而接口可以实现多继承的大多数好处,同时还能避免多继承的复杂性和低效性。
13,接口是对外暴露的规则,接口是程序的功能扩展。接口可以用来多实现。类与类之间是继承关系,类与接口之间是实现关系,接口与接口之间是继承关系。且接口之间支持多继承!
14,清楚理解类和对象的区别。有可以直接用类调用的方法为静态方法,和用类调用的数值为静态值,其他的类中定义的方法为对象引用,数值也是实例域的。在后面的面向对象编程中,对象和类的理解很重要。
15,异常:就是程序在运行时出现的不正常情况。
异常由来:问题也是现实生活中的一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
问题分为严重erro和不严重exception两种类型,对于erro一般不编写针对性的代码进行处理。对于exception异常,可以使用针对性的处理方式进行处理。
16,异常在子父中的体现:1,子类在覆盖父类的方法时,如果父类的该方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或该异常的子类。原因是,当调用父类的对象时,可以将子类传入,符合多态,但是子类抛出的问题不是继承自父类的的异常,在catch()中就没办法使用多态。
2,若父类抛出了多个异常,子类在覆盖时,是能抛出父类异常的子集,原因如上。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不能抛出异常。如果有异常就只能进行try处理,绝对不能抛。
17,public static final PI=3.14 public全局变量,谁都可以用。static静态变量,属于类,不用通过对象调用。final不可变的域。
18(RuntimeException运行时异常),Exception中有一个特殊的子类异常RuntimeException 运行时异常。
如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用进行处理。编译一样通过。
之所以不用在函数上声明,是因为不需要调用者进行处理。
当该异常发生,希望程序直接停止,因为在运行时出现了无法继续运算的情况,希望程序停止后对代码进行修改。
自定义异常时:如果该异常的发生,导致无法再继续运算,就让自定义异常继承RuntimeException。
19,对于异常分两种:1,编译时被检测的异常。
2,编译时不被检测的异常(运行时异常,RuntimeException及其子类)
20,finally只有一种情况不会执行,当执行到System.exit(0)时jvm虚拟机系统退出了。
21,异常的好处:
1,将问题进行封装。
2,将正常流程代码和问题处理代码相分离,便于阅读。
异常的处理原则:
1,处理方式有两种,Try或者throws
2,调用到抛出异常的功能时,抛出几个。
3,多个catch,父类的catch放在下面。
4,catch内需要定义针对性的处理方式,不要简单地定printstackTrace,输出语句。也不要不写。当捕获到异常,本功能处理不了时,可以继续在catch中抛出。
如果该异常处理不了,且并不属于该功能出现的异常,可以将异常转换后再抛出和该功能相关的异常。比如售货员和仓管员的例子。
或者异常可以处理,但需要将异常产生的和本功能相关的问题提供出去,让调用者知道,并处理,也可以将捕获异常后,转换新的异常。
22,Javac -d . test.java 自动创建包文件;-d就是创建包的意思,后面跟的 . 时默认目录下,也就是当前目录,后面可以指定路径,-d c:\class 也就是将包文件创建到class目录内。这样做可以将源文件和运行文件分离。
当要执行包文件时,在包所在的目录下就可以了。要不想更改所在目录,可以这样设置执行路径:set classpath=c:\calss 然后再运行。注意,有包时执行文件时文件名就要包含包名,例如java pack.packdemo。
23,访问权限
| public | protected | default | private |
—————|———–|—————|————|———–|
同一个类中 | ok | ok | ok | ok |
同一个包中 | ok | ok | ok
子类 | ok | ok |
不同包中 | ok |