Java基础语法

一、第一个程序

public class Main{
    public static void main(String args[]){
        System.out.println("Hello World!");
    }
}

二、屏幕输出的几种方式

public class Main{
    public static void main(String args[]){
        int a = 1;
        System.out.println("a表示数字 " + a);
        //基于Unicode码,会自带换行符
        System.out.print((int)'a');
        //进行Ascall码的转换和输出,只能输出字符和数字
        System.out.println();
        System.out.printf("我是一个例子,我的编号是%d,我的Ascall码为%d",a,(int)'a');
        //类似于C的printf(),也是基于Ascall码
    }
}

三、import java.util.Scanner类(输出文本控制台)

import java.util.Scanner;

class ScannerTest{
    public static void main(String args[]){
        Scanner in = new Scanner(system.in);//键盘
        int a = in.nextInt();
        //nextInt() 整型输入
        //nextDouble() 双精度浮点数输入
        //next() 单个字符输入
        //hasNext()   检测字符输入
        //nextLine()   输入字符串
        System.out.printf("%d的平方是%d",a,a*a);
        //另一种表示方法System.out.println(a+"的平方"+(a*a));
    }
}

四、Java.io包

//检测字符
import java.io.IOException;

public class Main{
    public static void main(String args[]){
        char c = ' ';
        System.out.println("Please imput a char");
        try{
            c = (char)System.in.read();
        //读取字符
        }catch(IOException e){}
        System.out.println("You have entered:"+ c);
    }
}

//检测字符串
public class Main{
    public static void main(String args[]){
        String s = " ";
        System.out.println("Please input a string");
        try{
            BufferedReader in = new BufferedReader(new  InputStreamReader(System.in));
        //封装成对象
            s = in.readLine();
        //键盘输入并读取
        }catch(IOException e){}
        System.out.println("You have entered:"+ s);
    }
}

in为键盘,out为屏幕
五、强制转换类型

import java.util.Scanner;

public class Main{
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        String S;
        double n;
        S = in.nextLine();
        n = Double.parseDouble(S);
        //Double.parseDouble() 转化为浮点数类型
        //Integer.parseInt()  转化为整型
        System.out.println(n);
    }
}

六、图形界面输入输出(Frame)

创建Applet程序

关闭键作用:
this.setDefaultCloseOperation(0);
// DO_NOTHING_ON_CLOSE,不执行任何操作。  
this.setDefaultCloseOperation(1);
//HIDE_ON_CLOSE,只隐藏界面,setVisible(false)。  
this.setDefaultCloseOperation(2);
//DISPOSE_ON_CLOSE,隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束。 
this.setDefaultCloseOperation(3);
//EXIT_ON_CLOSE,直接关闭应用程序,System.exit(0)。一个main函数对应一整个程序。  

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AppAppletInOut{
    public static void main(String args[]){
        new AppFrame();
    }
}
class AppFrame extends JFrame{
    JTextField in = new JTextField(10);
    //输入格大小
    JButton btn =  new JButton("求平方");
    //按钮
    JLabel out = new JLabel("用于显示结果");
    //文字说明
    public AppFrame(){
        setLayout(new FlowLayout());
        getContentPane().add(in);
        getContentPane().add(btn);
        getContentPane().add(out);
        //激活按钮
        btn.addActionListener(new BtnActionAdapter());
        //监视按钮,使按钮起作用
        setSize(400,100);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        //关闭按钮
        setVisible(true);
        //使窗口可见
    }

class BtnActionAdapter implements ActionListener {
        public void actionPerformed( ActionEvent e) {
            String s = in.getText();
            double d = Double.parseDouble(s);
            double sq = d*d;
            out.setText(d +"的平方是: " + sq);
        }
    }
}
同时作为Application与Applet的程序:
必备三个条件:
1、它是Applet的派生(extends Applet)
2、它含有main(),以便作为Application
3、在main中创建一个用户界面(Frame),并将这个Applet加入。

public class Main extends Applet {
    public static void main(String[] args) {
        Frame frame = new Frame();
        Main app = new Main();
        app.init();
        frame.add(app);
        frame.setSize(400, 100);
        //frame.show();
        frame.setVisible(true);
    }
}
//关闭键不起作用
JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的java.awt.Dialog类。
JDialog的功能是从一个窗体中弹出另一个窗体。
JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,
在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。
在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用以下几个JDialog类的构造方法。

public JDialog(): 创建一个没有标题和父窗体的对话框。
public JDialog(Frame f):创建一个指定父窗体的对话框,但该窗体没有标题。
public JDialog(Frame f,boolean model):创建一个指定父窗体的对话框,并指定类型,但该窗体没有标题。
public JDialog(Frame f,String title):创建一个指定标题和父窗体的对话框。
public JDialog(Frame f,String title,boolean model):创建一个指定标题、窗体和模式的对话框。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

class MyJDialog extends JDialog{
    public MyJDialog(Main frame)
    {
        super(frame,"第一个JDialog窗体",true);//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
        Container c = getContentPane();//创建一个容器
        c.add(new JLabel("这是一个对话框"));//在容器中添加标签
        setBounds(120,120,250,200);//设置对话框窗体大小
    }
}
public class Main extends JFrame{
    public static void main(String[] args) {
        new Main();
    }
    public Main(){
        setTitle("窗体");
        setBounds(100,100,300,200);//设置窗体坐标和大小
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        //设置窗体关闭规则,关闭窗口时释放窗体资源
        Container c = getContentPane();//创建一个容器
        c.setLayout(null);//取消布局管理器
        JLabel jl = new JLabel("这是一个JFrame窗体");//在窗体中设置标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);//将标签文字设置在标签中间位置
        c.add(jl);
        JButton bl = new JButton("弹出对话框");
        bl.setBounds(40, 40, 100, 20);
        bl.addActionListener(new ActionListener() {//为按钮添加鼠标单击事件
            public void actionPerformed(ActionEvent e) {
                new MyJDialog(Main.this).setVisible(true);//使MYJDialog窗体可见
            }
        });
        c.add(bl);
        setVisible(true);//设置窗体为可见
    }
}

七、字符类型

//字符的输出

public class Main{
    public static void main(String args[]){
        char A = '\n';  //char类型只能存储一个字符
        System.out.println("这是A代表的意思:" + A);  
        //输出换行符
        char a ='a';
        System.out.println("a就是代表字符a:" + a);
        char b = 'Z'-'A';
        System.out.println("字符Z-字符A得到:" + b);
        //不会输出,但转int可表示字符间距
        System.out.println("Z-A的Unicode码差为" + (int)b); 
        //java允许直接转换char类型得到Unicode码
        char c = 'd';
        System.out.println("字符d和a之间的间隔为" + (c-a));  
        //数据会先整型化,再输出字符间隔
        char d = '\u0041'; 
        //十六进制
        System.out.println("\u0041代表字符" + d);
        a++;
        System.out.println("字符a后的字符为" + a);
        //Unicode码按照顺序排列,输出a++代表的当前字符的下一个字符
        System.out.println((int)'A');
        //A的统一码为65,十六进制即41
        System.out.print((char)('a'+('A'-'a')));
        System.out.print((char)('A'+('a'-'A')));
        //输出大小写转换
    }
}
//字符串的输出
public class Main{
    public static void main(String args[]){
        String s = new String("this ");
        String a = "a string";
        System.out.println(s+a); 
        //支持字符串拼接
        if(s.equals("this ")){
            System.out.println("YES");
            //String类应用equals来判断数据是否相同
        }
    }
}


//字符串switch  1.7版本以上
public class Main{
    public static void main(String args[]) {
    String a = "a";
        switch (a)
        {
            case "a":System.out.print(123);
            break;
            default:break;
        }
    }
}


//字符串的操作
public class Main{
    public static void main(String args[]){
        String a = "abc";
        String b = " ABC ";
        System.out.println(a.compareTo(b));  
        //a小于b输出负数,相等为零,大于为正
        System.out.println(a.compareToIgnoreCase(b)); 
        //可以忽略大小写
        System.out.println(a.length()+" "+b.length());
        System.out.println(a.charAt(2)); 
        //访问index上的单个字符
        System.out.println(a.substring(1)); 
        //得到从n到末尾的全部内容
        System.out.println(a.substring(0,3));
        //得到m到n的全部内容
        System.out.println(a.indexOf("b")); 
        //没有返回-1
        System.out.println(a.indexOf("a",1));
        System.out.println(a.lastIndexOf(a)); 
        //从右开始检查
        System.out.println(a.lastIndexOf("a",3));
        //从右第三个开始
        System.out.println(a.startsWith("a")); 
        //检查开头是不是某字符
        System.out.println(a.endsWith("c"));  
        //检查结尾是不是某字符
        System.out.println(b.trim()); 
        //去掉两端的空格
        System.out.println(a.replace("a","b"));

        System.out.println(b.toLowerCase());

        System.out.println(a.toUpperCase());

    }
}

八、数据类型

public class Main{
    public static void main(String args[]){
    char VOID; //字符,2字节
    int a = 200; //整型
    float b; //单精度浮点数,4字节
    double B; //双精度浮点数,8字节
    short f; //短整型,4字节
    long e; //长整型,8字节
    byte c; //字节类型,比特,1字节,范围-128~127
    boolean d; //逻辑类型,布尔,1字节,只存在0(true)和1(false)两种状态

    int a1 = 012;
    System.out.println(a1);
    //八进制

    int a2 = 0X12;
    System.out.println(a2);
    //十六进制

    int a3 = 0B00010010;
    System.out.println(a3);
    //二进制

    double B1 = 123_456.654_321;
    System.out.println(B1);
    //千分位可以用下划线"_"分隔

    double B2 = 3.14e1;
    double B3 = 1E1;
    System.out.println(B2*B3);
    //科学计数法,En代表10^n

    long e1 = 3l;
    long e2 = 3L;
    //声明long型常量

    float b1 = 1.0f;
    float b2 = 1.0F;
    //声明float浮点数

    c = (byte)a;
    System.out.print(c);
    //byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111十进制表示形式为127
    //而最小负数为10000000,其反码为01111111,原码为10000000表示-128
    //200对应的二进制位111000100,由于int是32位的二进制,而当int转成byte的时候,那么计算机会只保留最后8位,即11001000
    //-56 对应正数56(00111000)→所有位取反(11000111)→加00000001(11001000)
    //所以输出了-56
    }
}

九、注释

十、三目运算符?用法

import java.util.Random;

public class Main{
    public static void main(String args[]){
        Random r = new Random();
        int a = 5;
        int b = r.nextInt(10);
        int c = a>b?a:b;
        System.out.println(c);
        System.out.print(b);
    }
}

十一、随机数

import java.util.Random;

public class Main{
    public static void main(String args[]){
        Random r = new Random(5);
        //设置种子,设置会固定数值,否则数值会变换
        int ran1 = r.nextInt(100);
        //获取整数随机数
        System.out.println(ran1);

        double ran2 = Math.random();
        //Math的随机数一般为double类型,介于0.0~1.0之间
        System.out.println(ran2);

        long ran3 = System.currentTimeMillis();
        //方法返回从1970年1月1日0时0分0秒(这与UNIX系统有关)到现在的一个long型的毫秒数,
        // 取模之后即可得到所需范围内的随机数
        System.out.print(ran3);
    }
}

十二、结构语法

public class Main{
    public static void main(String args[]){
        //if(){}
        //else{}
        //else if ()
        /*
        switch(){
            case 1:
                break;
            ···
            ···
            default:
        }
        */
        //while(){}
        //continue
        //for(int i = 10; i<0 ; i--){}
        //do{}while()
    }
}

十二、数组运用

import java.util.Scanner;

public class Main{
    private int year;
    private int month;
    private int day;
    public Main(int year,int month){
        this.year=year;
        this.month=month;     //this指针指向对象内的数据
    }
//构造函数
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);  
**建立对象数组**
        Main []dates = new Main[2];
        dates[0] = new Main(1 , 2);
        dates[1] = new Main(4 , 5);  //为数据赋值
        System.out.println(dates[0].year+ dates[1].month);

**定义方式**   
        int a[] = new int[3],i = 2;
        //在java中数组只是一个引用类型,不能直接指定数组元素的个数,如:int a[5]在这里就是非法的
        //int [] a ,b;
        //当数组符号[]在数据项前面时代表定义多个数组,即后面定义的均为数组类型;
        System.out.println("这里输出数组的长度 Length :" + a.length() )
        while(i >= 0){
            a[i] = in.nextInt();
            i--;
        }
        i++;

**一般输出**
        for(;i<3;i++ )
        System.out.println(a[i]);

**利用length输出**
        for(int j = 0; j < a.length ; j++){
        System.out.println(a[j]);
        }

**只读性遍历的for语句输出**
        for(int A : a){
        System.out.println( A );
        }
**数组的复制**
        int []b = {7,8,9};
        System.arraycopy( a , 0 , b , 0 , a.length) ;
//第一个位置是源数组,第二个位置是被复制开始的位置,第三个位置是目的数组,第四个位置是复制开始的位置,第五个位置是复制元素的个数

**多维数组**
        int [][] t = new int [2][];
        t [0] = new int [2];
        t [1] = new int [4];
//和C++不同,Java数组类型为应用,而C++为指针类型,所以像C++语法int t[][] = new int [][2]在这里就属于非法
      }
}

十三、类的定义

//类是组成Java程序的基本要素
//是一类对象的原型
//它封装了一类对象的状态和方法(它将变量和方法封装到一个类中)

//字段(field)是类的属性,用变量来表示(字段又称为域,域变量,属性,成员变量)
//方法(method)是类的功能与操作,用函数来表示

import java.util.Scanner;

public class Main {
    private String name;
    private int age;
    //构造方法
    //一般情况下,类都有一个至多个构造方法
    //如果没有定义任何构造方法,系统会自动产生一个构造方法,称为默认构造方法
    //默认构造方法不带参数,并且方法体为空
    public Main(){
        this("暖羊羊",8,100);
        //使用this在当前构造函数中调用另一种构造函数,此条调用语句需要放在第一句
        Scanner in = new Scanner(System.in);
        name = in.nextLine();
        System.out.print("ok");
        age = in.nextInt();
    }
    //一个类如果显式的定义了带参构造函数,那么默认无参构造函数自动失效
    //这里父类如果带了参数,那么后继继承的子类就无法使用无参构造函数
    public void printEmployee(){
        System.out.println("第一个是"+ name + " 年龄" + age );
    }

    //方法重载:多个方法有相同的名字,编译时能识别出来
    //这些方法的签名(方法类型)不同,或者是个数(变量数量)不同,或者是参数类型(变量类型)不同
    //通过方法重载可以实现多态
    public void printEmployee(int age){
        System.out.println("年龄:" + this.age );
    }//方法重载
    public Main(String name, int age ,int result){}//构造方法重载

    public static void main(String args[]) {
        //Main Test = new Main();
        //如果调用了子类构造函数,就不必再次创建
        //System.out.print("OK");
        MainSon test = new MainSon("懒羊羊",7);
        test.print();
    }
}

//使用extends来继承父类,如果没有extends子句则该类默认为java.lang.Object的子类
//继承的好处在于可以提高程序的抽象的抽象程度
//实现代码的重用,提高开发效率和可维护性
class MainSon  extends Main
{
    private int age;
    private String name;

    //重新定义了printEmployee函数,对父类printEmployee进行了覆盖
    public void printEmployee(){
        System.out.println("第二个是"+ name + " 年龄" + age );
    }

    //因为继承不能继承到父类的构造方法,所以需要定义新的构造函数
    //而且子类的对象也属于父类的对象(子类可以使用父类方法),父类的对象不是子类的对象
    //如果父类对象引用指向的是一个子类对象,那么这个父类对象的引用可以强制转换成子类对象的应用
    public MainSon(String name, int age) {
        this.name = name;
        this.age = age;
        //表示域变量,而name,age只是参数变量
    }
    public void print(){
        super.printEmployee();
        //访问父类的方法
        this.printEmployee();
        //访问该类的方法
    }
}

十四、包和导入的定义

package pkg1[.pkg2[.pkg3...]];
1.包及子包的定义,实际上是为了解决名字空间、冲突,它与类的继承没有关系,事实上,一个子类与其父类可以位于不同的包中。
2.包的定义有两方面:一是名字空间,储存路径(文件夹),二是可访问性(同一个包中的各个类,默认情况下可以互相访问)。
3.包层次的根目录是由环境变量CLASSPATH来确定的。
4.在简单情况下,没有package语句,这时称为无名包。
5.像JDK中就有很多包,如:>java.applet、java.awt等等。
import package1[.package2...].(classname|*);

1.使用Java包内提供的类,使用import导入所需要的类。
2 使用时,import java.util.Scanner和import java.util,这里使用只能表示本层次的所有类,不包括子层次下的类。
3 java编译器会自动导入java.lang.*

javac可以将.class文件放入到相应的目录,只需要一个命令选项-d来指明包的根目录即可,如javac -d d:\tang\ch04 d:\tang\ch04\pk\TestPkg.java,javac -d pk*.java,其中‘.’代表当前目录;运行改程序,需要指明含有的main的类名:java pk.TestPkg。

包的目录是由环境变量CLASSPATH来确定的:
一是在java及javac命令行中,用-classpath d:\tang\ch04;c:\java\classes;.pk.TestPkg。
二是设定classpath环境变量,windows可手动设置,也可用命令行设定,set classpath = d:\tang\ch04;c:\java\classes;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容