一、 运行JAVA程序
(1)在doc窗口下运行Java文件(已安装JDK)
①java的编译:Javac 文件名.java,产生一个.class文件(字节文件)。
注意:一个类只能产生一个class文件。
如果JAVA文件放在一个包里,需要加入包的储存路径。
例如:JAVA文件放在文件夹com文件夹中的bit文件夹中,则首先在程序内导入包,导入包的格式为(package com.bit;)
然后再编译,编译命为javac com\bit\类.java,若程序中文字较多,则应用(javac -encoding UTF-8 com\bit\ 文件名.java)。
②运行生成的class文件
命令为(java 文件名),如果有包,则命令为(java com.bit.类)
注意:若要查看java反汇编,则用命令(javap -c 文件名进行访问)
(2) 在集成环境上运行
①在Eclipse下运行
②在Idea下运行。
注意:个人更建议使用Idea,因为IntelliJ本身就自带了众多的功能(如:GitHub的集成)。当然,在Eclipse你也可以通过选择不同版本的插件来获取到足够的功能,只是需要自己来配置这些插件。具体情况可以去网上查阅。
二、 JAVA的语言基础
(1)先看一个例子,现有一个名为(HelloWord.java)文件,其内部代码为:
public class HelloWord {
public static void main(String[] args) {
System.out.println(“HelloWord”);
}
}
在该段程序中:
public:访问修饰限定符 ,还有 private 、 protected 、 default(默认访问权限)。 其中访问权限由大到小的顺序为: private< default(默认访问权限)< protected
HelloBit:类名称,《阿里巴巴规约手册》中要求用大驼峰命名法。该名称需和文件名一致。
其它的命名规范如下:
函数,用变量的命名(小驼峰),类名(大驼峰),包名(小写)
main():主函数
static:静态类型关键字。
Println:其中后缀ln表示换行,若只有Print则为不换行打印,其中也可用printf()。
(2)标识符与关键字
1.标识符
①标识符不能为关键字,变量名不能以数字开头。
②Java语言严格区分大小写的,例如:republic和Republic是两个完全不同的标识符。
③由于Java使用的unicode字符集,因此标识符可以用各种语言(如汉文,日文,韩文等都可以)
2.关键字
用于修饰访问限定:private 、 protected 、 default、public
用于定义类,函数,变量修饰的:abstract(抽象)、final(修饰常量)、static(静态)、synchronized(处理线上安全)
用于定义类与类之间的关系:extends、implements(用于接口的实现)
用于建立实例,引用实例的关键字:new、this、super、instanceof
用于异常处理的关键字:try、catch、finally、throw、throws
用于包的关键字:package(导入文件包)、import(导入工具包)
(3) 数据类型
各数据类型的取值范围
其中大的数据类型转为小的需强转,如:
Long num1=26637448;
Int num2=(int) num1;
三、 Java中逻辑控制和方法的使用
在Java中,程序有三种分支结构:顺序结构、分支结构和循环结构。
(1)分支语句
1.if语句
if语句⼀共有两种形式:
①if(布尔表达式){
//条件满⾜时执⾏代码
}
else{
//条件不满⾜时执⾏代码
}
②if(布尔表达式){
//条件满⾜时执⾏代码
}
else if(布尔表达式){
//条件满⾜时执⾏代码
}
else{
//条件都不满⾜时执⾏代码
}
2. switch语句
语法:switch(数字|枚举|字符|字符串){
case 内容1 : {
内容满⾜时执⾏语句;
[break;]
}
case 内容2 : {
内容满⾜时执⾏语句;
[break;]
}
default:{
内容都不满⾜时执⾏语句; [break;]
}
}
注意:switch()括号中的参数不能用float、double、long、long long。但字符串和枚举可作为switch的参数
switch开关语句,若case之后没有break,则会满足到case之后的所有语句一直执行到break或全部结束
(2) 循环语句
}
public class Test{
public static void main(String[] args) {
int n=Person.count;
System.out.println (n );//静态不属于类,只能用类名调用
Person.function();//用类名调用静态函数
this.function();//调用类中不是静态的函数
Person person =new Person();//实例化对象
System.out.println (person );//打印无参构造函数
Person person2 =new Person(“bit”,10); //实例化对象
System.out.println (person2 );//有参构造函数打印
}
}
○3实例代码块和静态代码块
class Person {
private String name;
private int age;
public int data = 10;
public static int count=0;
static{ //静态代码块只能用静态数据,不调用可打印
count=100;
System.out.println(“static{}”);
}
{//实例代码块(不能访问静态数据)
this.data=99;
System.out.println(“instance{}”);
}
}
public class Test2{
public static void main(String[] args) {
Person person=new Person();
System.out.println (person );
}
}
从以上代码分析可知对象的初始化顺序为:
静态代码块——实例代码块——构造函数
被static所修饰的不依赖于对象,需要类名调用,且先被执行,并且只会被初始化一次。
(3) this关键字:
class A{ //定义父类,只有名字无年龄
private String name;
public String setName(String name){
this.name=name;
return name;
}
}
class B{ //定义父类B,只有年龄无名字
private int age;
public int SetAge(int age){
this.age=age;
return age;
}
}
class Out{ //定义外部类
private String school;
private class Int1 extends A{ //定义内部类Int1
private int age;
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine ( );
public Int1 (int age ){ //内部类构造函数
this .age=age;
}
public int getAge() {
return age;
}
public String getName(){
return super.setName (name); //内部类调用父类(即调用A类)
}
} //内部类Int2完
private class Int2 extends B{ //定义内部类Int2
private String name;
Scanner input = new Scanner(System.in);
int age= input.nextInt ();
public Int2(String name){ //内部类构造函数
this.name=name;
}
public String getName(){
return name;
}
public int getAge(){
return super.SetAge (age ); //内部类调用父类(即调用B类)
}
} //内部类Int2完
public Out(String school){ //外部类构造函数
this.school=school;
}
Scanner input = new Scanner(System.in);
int age= input.nextInt ();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine ( );
public String person1() { //外部类方法
Int1 person1 = new Int1 ( age ); //外部类调用内部类 Int1
return (“姓名:”+person1.getName ()+" \t"+“年龄:”+person1.getAge ()+" \t"+“学校:”+school+"\t");
}
public String person2(){ //外部类方法
Int2 person2=new Int2(name); //外部类调用内部类 Int1
return (“姓名:”+person2.getName ()+" \t"+“年龄:”+person2.getAge ()+" \t"+school+" \t");
}
}
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String school= scanner.nextLine ( );
Out people=new Out(school);
System.out.println (people.person1 () );
System.out.println (people.person2 () );
}
}
○1继承的定义:继承的主要作用在于,在已有的基础上继续进行功能的扩充。
○2 在Java中用extends实现继承,被继承者成为(基类、父类或超类),比如以上程序的A类和B类称为基类;继承A类和B类的称为(子类、派生类);
○3派生类继承了基类,继承除构造函数外的其他东西。派生类需要帮助基类构造。派生类对象实例化之前需要先实例化基类对象。
○4被 final 所修饰的类属于密封类不能被继承。被private所修饰的类也不能被子类所继承。
○5Java可实现多继承:
正确形式: class A{};
class B extends A{};
class C extends B{};
错误形式:class A{};
class B{};
class C extends A,B{};
多态:基类引用 引用派生类对象,并且基类和派生类有同名的覆盖(重写)方法
○6继承总结:
○9接口的工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式、代理设计模式)
此处以抽象工厂模式举例,其他见博客:
public interface Computer {
void printComputer();
}
class MacbookProcComputer implements Computer{
@Override
public void printComputer() {
System.out.println (“这是一个苹果电脑!” );
}
}
class SurfacebookComputer implements Computer{
@Override
public void printComputer() {
System.out.println (“这是一个外星人笔记本电脑!” );
}
}
interface OperateingSystem{
void printSystem();
}
class MacSystem implements OperateingSystem{
@Override
public void printSystem() {
System.out.println (“这是一个苹果系统!” );
}
}
class SurfaceSystem implements OperateingSystem{
@Override
public void printSystem() {
System.out.println (“这是一个外星人系统!” );
}
}
interface ProductionFactory{
Computer createComputer();
OperateingSystem createSystem();
}
class AppleFactory implements ProductionFactory{
@Override
public Computer createComputer() {
return new MacbookProcComputer ();
}
@Override
public OperateingSystem createSystem() {
return new MacSystem ();
}
}
class AlineFactory implements ProductionFactory{
@Override
public Computer createComputer() {
return new SurfacebookComputer ();
}@Override
public OperateingSystem createSystem() {
return new SurfaceSystem ();
}
}
class Client{
public void buyComputer(Computer computer){
computer.printComputer ();
}
public void use(OperateingSystem s){
s.printSystem ();
}
}
public class Test {
public static void main(String[] args) {
ProductionFactory factory=new AppleFactory ();
Client client =new Client ();
client.buyComputer ( factory.createComputer () );
client.use ( factory.createSystem() );
}
}
(6) 抽象类与接口的区别
七、 三大特殊类
○1String类
(1)class Test {
public int data1 = 10;//堆
public static int data2 = 20;//方法区
public static final int DATA = 30;//方法区
public final int DATA2 = 40;//堆
public void fun() {
int a = 10;//栈
int b = 30;
//Person p = new Person();
}
}
(2) 字符串相等的比较:
1.使用equals比较字符串的内容。格式为(str1.equals(str))
2.== 本身是进⾏数值⽐较的,如果现在⽤于对象⽐较,那么所⽐较的就应该是个对象所保存的内存地址数值⽐较,⽽并没有⽐较对象的内容。那么要想⽐较内容⽐较,则必须采⽤String类提供的equals⽅法。
(3)String类与equals的区别
八、 面向对象开发总结
(1) 导入文件包的格式:package www.bit.java.util
(2)类使⽤class和public class的区别: